逗号“,”引发的血案

作者:手气不错 发布时间:August 20, 2008 分类:Javascript

为了更好的说明问题,首先引出下面的题目

//请说明下面变量 a-d 的值
var a = [[1][1]];
var b = [['a','b','c'][1]];
var c = [['a','b','c'][1], ['a','b','c']];
var d = [['a','b','c']['length'], ['a','b','c']];
var e = [['a','b','c']['father', 'child', '0'], ['a','b','c']];

首先理解表达式

var a = [[1][1]];

的含义。我们可以将这个语句拆分下

var tmp = [1];
var a = [tmp[1]];

就能非常好的理解,实际上 a 中的数组元素取得是 tmp[1] ,它并没有定义,所以值为 undefined 。那么

var b = [['a','b','c'][1]];

就很容易理解为 ['b'] ,因为数组紧跟的后面是下标表达式。同时,数组也是个对象,它有相应的属性值,并且可以使用关联数组表示,于是

['a','b','c']['length']

的含义就是

var tmp = ['a','b','c'];
console.info(tmp.length);

取的是 ['a','b','c'] 的长度,所以是 3 。而

['a','b','c']['father', 'child', '0']

后面的 ['father', 'child', '0'] 实质上是表达式,而不是数组。所以简化以后就是

['a','b','c']['0']

那么返回的就是 ['a'] 。这就让我们需要在实际的编码过程中,需要注意数组中的逗号“,”是否已经正确的加上,否则就会得到非期望的结果。

已有 3 条回复

  1. 达达 August 20th, 2008 at 09:56 pm #1
    达达

    数组噶不起眼的东东都能整出这么多的花样!!!牛!!!

  2. Lunatic Sun August 21st, 2008 at 12:27 am #2
    Lunatic Sun

    加一条,在Array Literal最后一个元素的后面加一个逗号,那么在IE中这个Array对象和其他浏览器的略有不同。

  3. chenbing October 25th, 2008 at 03:58 am #3
    chenbing

    ['a','b','c']['father', 'child', '0']等价于['a','b','c']['0']等价于'a'

    呵呵 原来这样

    如果

    ['a','b','c']['father', 'child', '0',]呢

添加新回复

Yahoo 统计