Javascript 逗号“,”引发的血案


为了更好的说明问题,首先引出下面的题目
  1. //请说明下面变量 a-e 的值
  2. var a = [[1][1]];
  3. var b = [['a','b','c'][1]];
  4. var c = [['a','b','c'][1], ['a','b','c']];
  5. var d = [['a','b','c']['length'], ['a','b','c']];
  6. var e = [['a','b','c']['father''child''0'], ['a','b','c']];

首先理解表达式
  1. var a = [[1][1]];
的含义。我们可以将这个语句拆分下
  1. var tmp = [1]; 
  2. var a = [tmp[1]]; // honker: tmp[1] 就是 [1][1]
就能非常好的理解,实际上 a 中的数组元素取得是 tmp[1] ,它并没有定义,所以值为 undefined ( honker:也就是说a.length=1, a[0] = undefined)。那么
  1. var b = [['a','b','c'][1]];
就很容易理解为 ['b'] ,因为数组紧跟的后面是下标表达式。同时,数组也是个对象,它有相应的属性值,并且可以使用关联数组表示,于是
  1. ['a','b','c']['length']
的含义就是
  1. var tmp = ['a','b','c'];
  2. console.info(tmp.length);
(honker: obj ['length']意思是访问obj.length的意思)
取的是 ['a','b','c'] 的长度,所以是 3 。而
  1. ['a','b','c']['father''child''0']
后面的 ['father', 'child', '0'] 实质上是表达式 (honker:即逗号表达式),而不是数组。所以简化以后就是
  1. ['a','b','c']['0']
那么返回的就是 ['a']  (honker:实际上字符串'0'被转换成了数字0)。这就让我们需要在实际的编码过程中,需要注意数组中的逗号“,”是否已经正确的加上,否则就会得到非期望的结果。










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值