为什么用大括号括起来的参数列表返回最后一个参数?

时间:2018-10-28 16:23:56

标签: javascript

我正在更正一些基本的Javascript作业,并且一名学生在构造函数中的这一行让我很沮丧:

this.c = (255, 255, 255);

我想向他们(和我自己)解释为什么这个陈述或任何类似的陈述会求助于最后给出的“论点”。

console.log( ("foo", 42, {}, NaN) )  --> NaN
console.log( ("foo", 42, {}) )       --> Object
console.log( ("foo", 42) )           --> Number
console.log( ("foo") )               --> String
console.log( () )                    --> SyntaxError // no longer the same thing

在分配它们的情况下,他们使用该属性作为RGB值,但仅坚持单色,因此它们的代码仍按预期运行。我想知道该语句叫什么(如果有名称?),以及在JS规范方面的表现。

谢谢。

1 个答案:

答案 0 :(得分:5)

它是comma operator。这是一个不寻常的运算符:它评估其左操作数,将其丢弃,评估其右操作数,并将结果用作结果值。您有时会看到它用于评估第一个操作数有副作用的地方:

const a = (console.log("foo"), 42);
console.log(a);

上面链接的MDN页面稍微不准确,表明逗号运算符接受两个以上的操作数。它不是,它是一个二进制运算符(它接受两个操作数)。只是从左到右的关联,所以

const a = (1, 2, 3);

相同
const a = ((1, 2), 3);