zoukankan      html  css  js  c++  java
  • 不存在的数组元素

    数组字面量是个神奇东西,试在chrome的控制台打印如下内容:

    >>>[]
    []
    >>>[,]
    []
    >>>[,,]
    []
    

    但这不是真相,我们用火狐的firebug看看:

    >>> []
    []
    >>> [,]
    [undefined]
    >>> [,,]
    [undefined, undefined]
    

    这种显示方式类似其他语言的inspect方法,我们不妨再看看其toString方法:

    >>> [].toString()
    ""
    >>> [,].toString()
    ""
    >>> [,,].toString()
    ","
    

    我们发现最一个逗号总是被省去的,本来应该是两个元素夹半一个逗号,现在[,]里面只有一个元素undefined

    >>>[,].length
    1
    

    我们再用ecma262v5新增的元编程方法,Object.getOwnPropertyDescriptor看看。此方法是用于查看某个对象的某个属性对应的特征描述。

    >>>Object.getOwnPropertyDescriptor([,], 0)
      undefined //由于它基本不存在第一个元素(索引值为0),因此当然没有对应的特征描述
    

    相对应,如果它存在元素,即使其值为undefined

    >>>Object.getOwnPropertyDescriptor([undefined], 0) //chrome 的结果
    Object
       configurable: true
       enumerable: true
       value: undefined
       writable: true
       __proto__: Object
    //=============================================================
    >>> Object.getOwnPropertyDescriptor([undefined], 0) //firebug的结果
    Object { writable=true, enumerable=true, configurable=true}
    

    但当然,上面的都是非常规范与超前的东西,这些东西在IE下可能就行不通了,如[,].length在IE678显示为2!更多怪异的现象见下面这个比较,对于数组的undefined元素不同生成方式,其可遍历性也不一样。

          var a1 = [,,,];
          var a2 = new Array(3);
          var a3 = [undefined,undefined,undefined];
         
          alert(0 in a1);
          alert(0 in a2);
          alert(0 in a3);
    
          //FF4     false false true
          //opera10 false false true
          //chrome  false false true
          //IE6     false false false
          //IE8     false false false
          //IE8     false false false
          //IE9     false false true
          //IE10p   false false true
          //搜狗2.2 false false true
          //360极速 false false true
    
  • 相关阅读:
    深入了解抽象类和接口
    关于Hibernate查询对象调用set方法自动同步到数据库解决方案
    【鸽子的迷信(一)】python导入由excel文件改后缀变成的csv文件出现乱码错误(ParserError:Error tokenizing data. C error:)
    《计算机操作系统》CH1操作系统引论思维导图整理
    IntelliJ IDEA创建一个Maven项目
    C++实验三
    小练习
    C++实验二
    C++的ch1&ch2的整理
    C++实验一
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/2046570.html
Copyright © 2011-2022 走看看