美文网首页
2021-04-14

2021-04-14

作者: 小王子__ | 来源:发表于2021-04-14 15:01 被阅读0次

    js判断数组的3个方法

    1,Object.prototype.toString.call()

    能准确的判断所有的数据类型类型

    每一个继承Object的对象都有一个toString方法,如果toString方法没有被重写的话,会返回[Object type],其中type为对象的类型。

    const arr = ["Hello", "World"]
    arr.toString() // => "Hello,World"
    Object.prototype.toString.call(arr) // => "[Object Array]"
    

    除Object类型的对象外,其他类型直接使用toString()方法,会直接返回字符串。所以需要使用call或者apply方法来改变toString方法的执行上下文。

    Object.prototype.toString.call('string')
    Object.prototype.toString.call(1)
    Object.prototype.toString.call(false)
    Object.prototype.toString.call(Symbol(1))
    Object.prototype.toString.call(function () {})
    Object.prototype.toString.call({name: 'Jerry'})
    Object.prototype.toString.call([1, 2, 3, 4])
    Object.prototype.toString.call(null)
    Object.prototype.toString.call(undefined)
    
    image
    2,instanceof

    能检测array、function、object类型

    instanceof用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上。简单说就是instanceof是用来判断 A 是否为 B 的实例,表达式:A(object) instanceof B(constructor)

    1 instanceof Number
    'str' instanceof String
    true instanceof Boolean
    [1,2,3] instanceof Array
    function () {} instanceof Function
    {} instanceof Object
    
    image

    instanceof 的缺点:
    是否处于原型链上的判断方法不严谨

    instanceof 方法判断的是是否处于原型链上,而不是是不是处于原型链最后一位,所以会出现以下情况:

    var arr = [1, 2, 3]
    arr instanceof Array  // true
    arr instanceof Object  // true
    
    function fn() {}
    fn instanceof Function  // true
    fn instanceof Object   // true
    

    因为所有原型链的尽头都是Object

    3, Array.isArray()

    用于判断对象是否为数组

    Array.isArray()是ES5推出的,不支持ES6~8,使用时应考虑兼容

    if (typeof Array.isArray !== "function") {
      Array.isArray = function (obj) {
        return Object.prototype.toString.call(obj) == "[Object Array]"
      }
    }
    

    相关文章

      网友评论

          本文标题:2021-04-14

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