JavaScript中數據類型檢測方法盤點

n7w77 9年前發布 | 12K 次閱讀 JavaScript開發 JavaScript

本文羅列了一般Js類型檢測的方法,是構建Js知識體系的一小塊。

一、Js中有5種基本數據類型

Undefined 、Null、Boolean、String、Number(包含NaN)

NaN和任何類型的值都不相等,包括NaN;isNaN用來判斷數值是不是NaN類型

二、類型判斷

1. isFinite(number)<br />

是不是無窮大,如果不是返回true,如果是NaN,或者正負無窮大,或者非數字類型返回false</p>

2. typeof運算符<br />

使用的時候,空格或者typeof(param)</p>

返回的值

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. 數組等原生類型的識別,可以采用如下</p>

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")</pre>

4. 自定義類型判斷</p>

/**

  • 返回函數的名字,可能為空串;不是函數,返回null / Function.prototype.getName = function () { if ("name" in this) return this.name; return this.name = this.toString().match(/function\s([^(]*)(/)[1]; };</pre>

    原生類型和自定義類型的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"; };</pre>

      5.

      var strObj = new String('abc');

typeof strObj // "object"

obtainType(strObj) // "String"</pre>

三、 其它

1. Dom元素判斷<br />

if(dom.nodeType){…Dom…}
if(dom.createElement)</p>

2. jQuery等類型判斷<br />

$(‘#aa’) instanceof jQuery//不支持跨多窗口和框架子頁面</p>

3. if(a) a為null undefined 0 “” NaN時自動轉換成false<br />

一般推薦的寫法</p>

// bad
if (name !== '') {
    // ...stuff...
}

// good if (name) { // ...stuff... }

// bad if (collection.length > 0) { // ...stuff... }

// good if (collection.length) { // ...stuff... }</pre> 來源:小方的博客

 本文由用戶 n7w77 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!