用括号括住 JavaScript 语句有啥意义?

Posted

技术标签:

【中文标题】用括号括住 JavaScript 语句有啥意义?【英文标题】:What is the point of wrapping JavaScript statements in parentheses?用括号括住 JavaScript 语句有什么意义? 【发布时间】:2013-04-23 08:51:31 【问题描述】:

我发现用括号括起不同的语句会返回最后一个:

(34892,47691876297,2000)                => 2000
('test',73,document.createElement('p')) => <p></p>

而且我还发现不管怎样,所有的语句都被执行了:

(console.log('test'), console.log('test2'), console.log('test3'), 6)

将记录:

test
test2
test3

结果将是 6。

不过,我也发现有些语句不能用:

(throw new Error(), 10)         => SyntaxError: Unexpected token throw
(if (1) console.log('test'), 5) => SyntaxError: Unexpected token if

那么,这个括号-逗号符号的意义何在?您可以轻松地执行所有语句,然后使用最后一条语句的值。这个是来做什么的?我是不是用错了?

【问题讨论】:

许多语言都以这种方式工作; Scala 就是这样工作的。 @RobertHarvey 那么,这样做有什么意义呢?我不明白为什么你不能只执行所有的语句。 throw 似乎很明显。第二个例子表明该列表只接受基本表达式,而不接受复杂的代码结构。 developer.mozilla.org/en-US/docs/javascript/Reference/Operators/… 34892console.log('test')表达式ifthrow语句。您可以将运算符(包括逗号运算符)应用于表达式,但不能应用于语句。 【参考方案1】:

那是逗号操作符:)

它允许您从左到右评估表达式,返回最后一个操作数的结果(在您的情况下,它没有存储在任何地方,并且完全有效)。

参考:

http://www.ecma-international.org/ecma-262/5.1/#sec-11.14 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Comma_Operator

【讨论】:

【参考方案2】:

最明显的一点是在一个 for 循环中允许多个表达式:

for (let x=3, y=6; x < 10; x++, y++) ...
                           ^^^^^^^^

这是逗号运算符,同样的运算符也允许您提供的示例

return (x, y)

【讨论】:

以上是关于用括号括住 JavaScript 语句有啥意义?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript continue语句有啥用?

杂谈2.py

带/不带大括号的 C# Switch 语句....有啥区别?

sql语句中方括号[]有啥用?

JavaScript 正则表达式 通俗解释 快速记忆

`var ... = ...` 语句中的大括号有啥作用?