美文网首页
判断类型

判断类型

作者: 你喜欢吃青椒吗_c744 | 来源:发表于2019-08-04 10:25 被阅读0次

    类型

    JavaScript 中有七种内置类型:

    空值 (null)
    未定义 (undefined)
    布尔值 (boolean)
    数字 (number)
    字符串 (string)
    符号 (symbol,ES6中新增)
    对象 (object) :复杂数据类型

    typeof

    typeof常常被用做判断基本类型,但它不能判断复杂数据类型。

      typeof undefined; // undefined
      typeof []; // object
      typeof '123'; // string
    

    注意点:

    • 当操作数为null时。
      typeof null; // object
    
    • NaN(not a number)会被判断为number
    typeof NaN; //number
    typeof 1/0; // NaN
    
    • Symbol
    typeof Symbol('foo'); //symbol
    
    • type可以判断函数对象
    typeof function(){} === 'function';
    typeof Math.sin === 'function';
    

    从技术角度讲,函数在ECMAScript中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过typeof操作符来区分函数和其他对象是有必要的。在实际的使用过程中有必要区分ObjectFunction,所以在typeof这里实现了

    • 它不能区分对象、数组、正则,会返回"object"
    typeof [1,2,3]; //object
    

    instanceof

    • instanceof操作符返回一个布尔值,主要用来表明指定对象是否为某个构造函数的实例
    • 因为instanceof对整个原型链上的对象都有效,所以同一个实例对象,可能会对多个构造函数都返回true
      const s = new String('123');
    
      s instanceof String; // true
      s instanceof Object; // true
    
    
    • 利用instanceof操作符,我们可以对自定义的对象进行判断:
      function Animal (name) {
        this.name = name
      }
    
      const fizz = new Animal('fizz');
    
      fizz instanceof Animal // true
    
    

    注意,instanceof对象只能用于复杂数据类型(数组,对象等),不能用于简单数据类型(布尔值,数字,字符串等)。此外,null和undefined都不是对象,所以instanceof 总是返回false。

    constructor属性

    • prototype对象有一个constructor属性,默认指向prototype对象所在的构造函数。
    • 由于constructor属性是定义在原型(prototype)对象上面,意味着可以被所有实例对象继承
    function A(){};
    var a=new A();
    console.log(a.constructor===A) //true
    console.log(a.constructor===Array) //false
    
     var a = new Array();
    
    a.constructor; //Arrar
    Arrar.constructor; //Function
    
    image.png

    toString

    使用 Object.prototype.toString 方法, 可以获取到变量的准确的类型.

    function foo(){};
    
    Object.prototype.toString.call(1);  '[object Number]'
    Object.prototype.toString.call('1'); '[object String]'
    Object.prototype.toString.call(NaN); '[object Number]'
    Object.prototype.toString.call(foo);  '[object Function]'
    Object.prototype.toString.call([1,2,3]); '[object Array]'
    Object.prototype.toString.call(undefined); '[object Undefined]'
    Object.prototype.toString.call(null); '[object Null]'
    Object.prototype.toString.call(true); '[object Boolean]'
    Object.prototype.toString.call(Array); `[object Function]`
    ....
    

    Object.prototype.toString 的原理是当调用的时候, 就取值内部的 [[Class]]属性值, 然后拼接成 '[object ' + [[Class]] + ']'这样的字符串并返回. 然后我们使用call方法来获取任何值的数据类型.

    参考文章

    JavaScript中的类型判断,了解一下?
    Javascript 中的数据类型判断
    JS灵巧判断7种类型的方式

    相关文章

      网友评论

          本文标题:判断类型

          本文链接:https://www.haomeiwen.com/subject/ibjedctx.html