Javascript“元组”符号:它的意义是什么?

时间:2012-01-26 12:46:30

标签: javascript syntax tuples comma-operator

wtfjs,我发现以下内容是合法的javascript。

",,," == Array((null,'cool',false,NaN,4)); // true

参数(null,'cool',false,NaN,4)看起来像是一个元组,但是javascript没有元组!

我的javascript控制台中的一些快速测试产生以下结果。

var t = (null,'cool',false,NaN,4); // t = 4
(null,'cool',false,NaN,4) === 4; // true
(alert('hello'), 42); // shows the alert and returns 42

它的行为与分号;分隔的语句列表完全相同,只是返回最后一个语句的值。

是否有某个描述此语法及其语义的引用?它为什么存在,即应该何时使用?

3 个答案:

答案 0 :(得分:34)

您正在看到comma operator的效果。

  

逗号运算符计算它的两个操作数(从左到右)并返回第二个操作数的值。

评估a,b,c,...,n时的结果值始终是最右边表达式的值,但仍会评估链中所有表达式(从左到右)。

答案 1 :(得分:8)

如前所述,此行为是由,运算符引起的。因此,(null,'cool',false,NaN,4)表达式将始终评估为4。所以我们有

",,," == Array(4)

Array(4) - 创建分配了4个元素的新数组。在与字符串进行比较时,此数组将转换为字符串,就像使用Array(4).toString()一样。对于数组toString,就像在此数组上调用的join(',')方法一样。因此,对于4个元素的空数组,join将生成字符串",,,"

答案 2 :(得分:2)

试试这个alert((null,'cool',false,NaN,4)),然后就可以看到了。

demo

原因是因为逗号运算符会计算所有语句并返回最后一个语句。

想想这一行:a = 1, b = 2, c = 3;它将运行每个表达式,所以本质上它会将变量设置为你想要的并返回最后一个值(在本例中为3)