• 【Javascript】Javascript中如何判断变量是数组类型


      在Javascript中,数组与传统的数组类型不同,它是一个特殊的对象,并具有可以通过数字作为下标的访问数据方式,特殊的length,数组相关的方法等特点。这个特性使得JS中的数组使用起来更加灵活,但与此,也带来一些小麻烦,有时我们会把数组当成对象,有时又会将对象当成数组。因此,判断该变量是否是数组变得十分必要。那么如何判断一个变量是数组呢?

      我们首先想到的就是typeof方法,最简单的例子:

    var a=[];
    alert(typeof a);

    上述代码弹出的不是array,而是object!个人感觉这是设计的失败,因为typeof得出的结果没有意义(并不代表它错了,因为数组确实是对象,只是这里我们想知道它是不是数组)。

      既然typeof方法不行,那就换一个方法。我们知道,数组也是对象,在我们创建数组时,它也有一个原型prototype,我们就用这个prototype中最原始的方法来做吧。见如下代码:

    var t=[];
    alert(t.constructor===Array);

    非常好!它如愿以偿返回了true,这个方法在大多数情况屡试不爽,并且可以将数组和对象分辨出来。因此,在大部分的情况下,这个方法是非常可行的办法。

      但是需要说明的是,仅仅是大部分情况下。如果我们的脚本跨域执行,或访问iframe、frame、不同window的变量时,它就会出问题。例如,我们创建一个页面main.html,在body中插入iframe(id为aa),它的src是另外一个页面:inner.html。inner.html的代码如下:

    var ia=[];

    main.html页面的js代码如下:

    window.onload=function(){
        alert(document.getElementById('aa').contentWindow.ia.constructor===Array);
    }

    当main.html页面打开时,会弹出false。原因是因为===运算符造成的,因为inner.html中的ia变量是通过inner页面的window下的Array构造的,而这段代码的Array是main页面中的Array,因此返回了false。针对这种方法我们需要一个适应性更强的方法。下面代码为最终解:

    alert(Object.prototype.toString.apply(document.getElementById('aa').contentWindow.ia)==='[object Array]');

      通过这样的方法,我们就可以得到准确的Array类型了。在多次使用时,我们不妨封装成一个函数:

    function is_array(val){
        return Object.prototype.toString.apply(val)==='[object Array]';
    }
  • 相关阅读:
    perl练习——FASTA格式文件中序列GC含量计算&perl数组排序如何获得下标或者键
    短序列组装Sequence Assembly(转载)
    MEGA软件——系统发育树构建方法(图文讲解) 转载
    R语言中的read.table()
    网络七层模型OSI(Open System Interconnection)
    MySQL报错“The server time zone value '�й���׼ʱ��' is unrecognized”
    JDK环境变量配置
    netstat命令
    敏捷方法论(Agile Methodologies)
    0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded解决方法
  • 原文地址:https://www.cnblogs.com/echoloyuk/p/3158936.html
Copyright © 2020-2023  润新知