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

Gri*_*lse 26 javascript syntax tuples comma-operator

wtfjs,我发现以下是合法的javascript.

",,," == Array((null,'cool',false,NaN,4)); // true
Run Code Online (Sandbox Code Playgroud)

这个参数(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
Run Code Online (Sandbox Code Playgroud)

它看起来像一个分号;分隔的语句列表,只是返回最后一个语句的值.

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

Ric*_*lly 35

您正在看到逗号运算符的效果.

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

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


dfs*_*fsq 8

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

",,," == Array(4)
Run Code Online (Sandbox Code Playgroud)

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