JavaScript

javascript判断是否是数组方法总结

2019-07-21  本文已影响0人  Aniugel
// 判断是不是数组
    // ① 方法简单有效,缺点是IE8及以下版本浏览器不兼容
    var arr = [3, 4, 5, 6]
    var isArr = Array.isArray(arr)
    console.log(isArr)

    // ②
    var arr = [3, 4, 5, 6]
    var isArr = arr instanceof Array
    console.log(isArr)

    // ③
    var arr = [3, 4, 5, 6]
    var isArr = arr.constructor === Array
    console.log(isArr)
    console.log(typeof arr)

    // 判断数组封装的方法
    function isArray(obj) {
        return typeof obj == 'object' && obj.constructor == Array
    }

    // ④第二第三种方法也有列外情况,比如在跨框架iframe的时候使用页面中的数组时会失败,
    // 因为在不同的框架iframe中,创建的数组是不会相互共享其prototype属性的;当第二第
    // 三种方法也不能用时,可以使用最通用的方法 Object.prototype.toString.call()
    function isArray(obj) {
        return Object.prototype.toString.call(obj) == '[object Array]';
    }//仅判断Array

    function isType(data, type) {
        return Object.prototype.toString.call(data) === "[object " + type + "]";
    } //通用判断方法

    // 方法中的call()可以换成apply(),不能直接用toString调用,
    // 因为从原型链的角度讲,所有对象的原型链最终都指向了 Object, 
    // 按照JS变量查找规则,其他对象应该也可以直接访问到 Object 的
    //  toString方法,但是大部分的对象都实现了自身的 toString 方
    //  法,这样就可能会导致 Object 的 toString 被终止查找,因此要用 
    //  call或apply 来强制调用Object 的 toString 方法

typeof的一些坑 typeof 判断Array和null等特殊类型都会输出Object,typeof 返回值有六种可能: "number"、 "string"、 "boolean"、 "object" 、"function" 和 "undefined"。

上一篇下一篇

猜你喜欢

热点阅读