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
    
  • 相关阅读:
    异常类
    设计模式
    java的参数传递
    meta 标签中 http-equiv 的作用
    导入CSV格式文件方法
    第四次博客作业-结对项目
    第九次作业-接口及接口回调
    第八次作业-继承
    软件工程第三次作业——关于软件质量保障初探
    Java第七次作业
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/2046570.html
Copyright © 2011-2022 走看看