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)
它看起来像一个分号;分隔的语句列表,只是返回最后一个语句的值.
是否存在描述此语法及其语义的引用?它为什么存在,即应该何时使用?
如前所述,此行为是由,运营商引起的.因此,表达式(null,'cool',false,NaN,4)将始终评估为4.所以我们有
",,," == Array(4)
Run Code Online (Sandbox Code Playgroud)
Array(4) - 创建具有分配的4个元素的新数组.在与字符串进行比较时,此数组将转换为字符串,就像它一样Array(4).toString().对于数组toString,就像join(',')在此数组上调用的方法一样.因此对于4个元素的空数组,join将生成字符串",,,".