美文网首页
js判断一个变量是否为数组

js判断一个变量是否为数组

作者: 放风筝的小小马 | 来源:发表于2018-02-03 16:34 被阅读17次

    instanceof判断

    语法:

    object instanceof constructor
    

    说明:

    instanceof操作符用于判断 constructor的prototype属性是否存在于object原型链上;也就是constructor.prototype 是否存在于 object的原型链上

    用法

    var a = [];
    a instanceof Array;  // true
    

    注意事项
    使用instanceof在同一全局环境下进行判断不会有问题,当在多个窗口意味着多个全局环境,不同的全局环境拥有不同的全局对象,从而拥有《不同的内置类型构造函数,那么,判断出来的结果是不可预测的。

    例如:有一个父页面,一个子页面,我在子页面中定义了一个array变量,然后将该变量传递到父页面中,在父页面中通过 array instanceof Array来判断该array变量是否属于Array,则有可能出错,因为子页面中定义的array变量的构造函数可能已经被更改了,并不是父页面中的Array函数,因此要特别注意;

    使用Array.isArray()来判断

    这是ES5新添加的方法,支持的浏览器有:IE9+, FF4+, safari 5+, opera10.5+,chrome;
    解决兼容性问题

    if(!Array.isArray){
        Array.isArray = function(arg){
            return Object.prototype.toString.call(arg)==='[object Array]'
        }
    }
    

    使用Object.prototype.toString.call(arr) (最推荐)

    var ary = [1,23,4];
    function isArray(o) {
      return Object.prototype.toString.call(o) === '[object Array]';
    }
    console.log(isArray(ary));
    

    同时可以引申出检查《原生》对象、函数正则的方法:

    // 检查对象
    function isObject(o) {
      return Object.prototype.toString.call(o) === '[object Object]';
    }
    // 检查函数
    function isFunction(o) {
      return Object.prototype.toString.call(o) === '[object Function]';
    }
    // 检查正则
    function isRegExp(o) {
      return Object.prototype.toString.call(o) === '[object RegExp]';
    }
    
    
    
    参考:
    - [instanceof用法](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof)
    - [javascript 判断变量是否是数组(Array)](https://segmentfault.com/a/1190000004479306)
    

    相关文章

      网友评论

          本文标题:js判断一个变量是否为数组

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