首頁  >  文章  >  web前端  >  JavaScript中資料型別檢測方法的總結

JavaScript中資料型別檢測方法的總結

黄舟
黄舟原創
2017-03-14 15:08:541104瀏覽

本文羅列了一般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...
}

以上是JavaScript中資料型別檢測方法的總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn