• 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)。这就让我们需要在实际的编码过程中,需要注意数组中的逗号“,”是否已经正确的加上,否则就会得到非期望的结果。
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    成绩排序
    字符串排序
    多使用isset,少使用in_array
    Objective-C iOS之Block深究
    Objective-C iOS多线程之GCD深入理解
    Objective-C UI之自定义轮播图控件
    Objective-C UI之UITableView详解
    Objective-C KVC和KVO的使用
    Objectiv-C 为UIImageView,UILabel等默认没有交互的控件添加点击事件
    Objective-C 内存管理
  • 原文地址:https://www.cnblogs.com/honker/p/3774452.html
Copyright © 2020-2023  润新知