JavaScript中資料型別檢測方法盤點
本文羅列了一般Js型別檢測的方法,是構建Js知識體系的一小塊。
一、Js中有5種基本資料型別
Undefined 、Null、Boolean、String、Number(包含NaN)
NaN和任何型別的值都不相等,包括NaN;isNaN用來判斷數值是不是NaN型別
二、型別判斷
1. isFinite(number)
是不是無窮大,如果不是返回true,如果是NaN,或者正負無窮大,或者非數字型別返回false
2. typeof運算子
使用的時候,空格或者typeof(param)
返回的值
string
number
boolean
undefined
function
object null也返回object
根據以上,判斷型別可以如下:
var obtainType = function(o){ var t; if(o === null ) return “null”; else if(o !== o) return “NaN”; else if( (t = typeof o) !== ‘object’) return t; }
可以識別出null、NaN string number boolean undefined function。
上面最後只剩下object,比如陣列的識別,自定義型別的識別
3. 陣列等原生型別的識別,可以採用如下
function obtainType(type) { return function (obj) { return Object.prototype.toString.call(obj) === "[object " + type + "]" } } var isObject = isType("Object") var isString = isType("String") var isArray = Array.isArray || isType("Array") var isFunction = isType("Function")
4. 自定義型別判斷
/** * 返回函式的名字,可能為空串;不是函式,返回null */ Function.prototype.getName = function () { if ("name" in this) return this.name; return this.name = this.toString().match(/function\s*([^(]*)\(/)[1]; };
原生型別和自定義型別的object都可以判斷了,於是
/** * 返回:null NaN undefined string number boolean * function Array String Object(包括一些自定義型別) 自定義型別 */ var obtainType =function(o){ /** * 獲取引數型別 * 物件直接量、Object.create、自定義建構函式的類屬性皆為Object; * 識別出原生型別 (內建建構函式和宿主物件) */ function classOf(obj){ return Object.prototype.toString.call(obj).slice(8, -1); } /** * 返回函式的名字,可能為空串;不是函式,返回null */ Function.prototype.getName = function () { if ("name" in this) return this.name; return this.name = this.toString().match(/function\s*([^(]*)\(/)[1]; }; var t, c, n; // 處理null值特殊情形 if (o === null) return "null"; // NaN:和自身值不相等 if (o !== o) return "NaN"; // 識別出原生值型別和函式、undefined if ((t = typeof o) !== "object") return t; // 識別出原生型別 if ((c = classOf(o)) !== "Object") return c; // 返回自定義型別建構函式名字 if (o.constructor && typeof o.constructor === "function" && (n = o.constructor.getName())) return n; return "Object"; };
5.
var strObj = new String('abc'); typeof strObj // "object" obtainType(strObj) // "String"
三、 其它
1. Dom元素判斷
if(dom.nodeType){…Dom…}
if(dom.createElement)
2. jQuery等型別判斷
$(‘#aa’) instanceof jQuery//不支援跨多視窗和框架子頁面
3. if(a) a為null undefined 0 “” NaN時自動轉換成false
一般推薦的寫法
// bad if (name !== '') { // ...stuff... } // good if (name) { // ...stuff... } // bad if (collection.length > 0) { // ...stuff... } // good if (collection.length) { // ...stuff... }
相關文章
- JS中資料型別檢測方法——typeofJS資料型別
- javascript資料型別檢測方法JavaScript資料型別
- JS中資料型別檢測四種方式的優缺點JS資料型別
- javascript 資料型別檢測JavaScript資料型別
- JavaScript型別檢測JavaScript型別
- JavaScript的資料型別及其檢測JavaScript資料型別
- JavaScript安全的型別檢測JavaScript型別
- JavaScript 資料型別檢測終極解決方案JavaScript資料型別
- JavaScript變數型別檢測總結JavaScript變數型別
- JS中資料型別轉換JS資料型別
- js檢測資料型別JS資料型別
- MySQL中資料型別的驗證MySql資料型別
- 別再被坑了! JavaScript型別檢測的最佳實踐JavaScript型別
- JS專題之資料型別和型別檢測JS資料型別
- C中資料型別(Android之JNI)資料型別Android
- js 型別檢測JS型別
- 【JS】型別檢測JS型別
- C語言中資料型別的自動型別轉換C語言資料型別
- JavaScript nodeType節點型別JavaScript型別
- JavaScript 中的型別檢查JavaScript型別
- 漏洞型別及檢測型別
- JS中資料型別、內建物件、包裝型別物件、typeof關係JS資料型別物件
- C語言中資料型別轉換函式C語言資料型別函式
- PHP中資料型別轉換的三種方式PHP資料型別
- 混合運算中資料型別的轉換 (轉)資料型別
- JavaScript - 資料型別JavaScript資料型別
- JavaScript 資料型別JavaScript資料型別
- JavaScript資料型別JavaScript資料型別
- JavaScript: 資料型別JavaScript資料型別
- JavaScript資料型別判斷的四種方法JavaScript資料型別
- JavaScript 使用者代理檢測(瀏覽器型別檢測,執行平臺檢測等) 規範程式碼JavaScript瀏覽器型別
- 深度解析javaScript常見資料型別檢查校驗JavaScript資料型別
- 二進位制安全_C語言中資料型別C語言資料型別
- 異常:標準表示式中資料型別不匹配資料型別
- JavaScript 需要檢查變數型別嗎JavaScript變數型別
- JavaScript基本資料型別JavaScript資料型別
- javaScript的資料型別JavaScript資料型別
- 欄位型別檢測指令碼型別指令碼