2012-04-06 48 views
2

如果使用继续/布尔声明内线突破[V8]

true && (function() { console.log('executed'); })() 

是确定的,那么为什么

true && continue; 

true && (continue); 

不起作用,例如V8(节点)抛出:

SyntaxError: Unexpected token continue 
+0

对此有何用处?继续用于早期跳出循环/条件。它不是一个布尔值 – jzworkman 2012-04-06 14:06:06

+0

[这里](https://github.com/shichuan/javascript-patterns/blob/master/general-patterns/conditionals.html)见第125行 – jakubmal 2012-04-06 14:15:24

+0

这个例子与使用'continue '。虽然它仍然是一个声明,并且不能像下面解释的那样使用,但在布尔语句中继续使用将永远不会完成,只是想知道为什么您将此用作示例而不是使用真正的&&结果++这是您的真实示例。 – jzworkman 2012-04-06 14:20:49

回答

2

在JavaScript中,有表达式和语句。语句可以包含表达式,但不能反过来。语句true && false;是一个表达式语句。

&&需要两个表达式。

两个true(function() { ... })()表达式 - 一个布尔表达式计算到true,并评估对undefined函数表达式(包裹括号内,然后调用)。

continue声明,所以你不能使用&&。您必须使用if,因为if确实接受条件为true时要运行的语句。

根据规范它是正确的行为,不应该是V8特定的。

+0

任何不错的方式来包装它? – jakubmal 2012-04-06 14:18:01

+0

@jakubmal:你是什么意思? '如果(真)继续;'工作,并没有更多的代码。 – pimvdb 2012-04-06 14:18:51

+0

嗯,我知道,这是为了好玩,仍然'真正&&(继续,1)'不起作用 – jakubmal 2012-04-06 14:28:00

0

因为continue不表达返回一些值。完整的布尔表达式及其部分必须返回一些值。