是营造Js知识系统的一小块

正文罗列了貌似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,比方数组的辨别,自定义类型的分辨

  1. 数组等原生类型的辨认,能够运用如下

    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”)

  2. 自定义类型判别

    /**

    • 归来函数的名字,只怕为空白;不是函数,重返null
      /
      Function.prototype.getName = function () {
      if (“name” in this) return this.name;
      return this.name = this.toString().match(/functions
      ([^(]*)(/)[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(/functions*([^(]*)(/)[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’State of Qatar 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...
    

    }

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website