2012-04-06 51 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不表達返回一些值。完整的布爾表達式及其部分必須返回一些值。