[英]Do parentheses prevent semicolon insertion?
假設我想設置一組等於null的變量(並且不想使用數組/循環結構)或者我只想在多行中編寫一個大的布爾表達式。 在這種情況下,未公開的括號是否會阻止分號插入? 例如
some_variable = another_variable = yet_another_variable = (
oh_look_a_parenthesis_above_me = hey_heres_another_variable) = (
and_for_some_reason_another = last_one) = null;
要么
if(test_for_some_complex_expr && another_test || (
but_maybe_this_one && or_this_one)) {
// ...
}
這與使用&&
或||
相比如何進行比較 或=
在換行符上分組表達式? 即,這總是有效嗎?
some_variable = another_variable =
a_variable_after_a_line_break = and_one_more;
while(test_for_an_expr && another_test ||
(an_expr_here && and_an_expr_here)) {
// ...
}
我正在尋找所有瀏覽器(包括IE6 +)最標准的方式。
如果你的代碼是沒有分號的語法錯誤,則只會發生分號插入。 在您的情況下,表達式是完全有效的,因此您不必擔心分號插入 - 括號或不括號。
以分號插入的示例:
var a = 1
var b = 2
在上面的例子中,在換行符處插入分號,但這只是因為寫入語法錯誤:
var a = 1 var b = 2
但寫完是完全有效的:
var a = 1; var b = 2
規則變得棘手,因為JavaScript語法中存在一些不允許換行的實例。 例如,' return
'關鍵字和要返回的值之間不允許換行。 所以這是一個語法錯誤:
return
17;
但分號插入“修復”此錯誤的方式是插入一個像這樣的分號:
return;
17;
這可能不是作家的意圖! 在該特定情況下,可以使用括號來防止分號插入:
return (
17);
因為它只在return關鍵字和表達式的開頭之間不允許換行。 在表達式中,這不是問題。
在這種情況下,未公開的括號是否會阻止分號插入?
是。 雖然沒必要:
這與使用
&&
或||
相比如何進行比較 或=
在換行符上分組表達式?
它完全一樣。 它們是需要第二部分的表達式,因此ASI不能 - 不得 - 在不使結果無效的情況下啟動。
只有在沒有分號的情況下連續行無效時才會發生ASI。 請參閱JavaScript的自動分號插入(ASI)的規則是什么? 詳情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.