用括号括住 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/…
34892
和console.log('test')
是表达式,if
和throw
是语句。您可以将运算符(包括逗号运算符)应用于表达式,但不能应用于语句。
【参考方案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 语句有啥意义?的主要内容,如果未能解决你的问题,请参考以下文章