簡體   English   中英

括號是否可以防止分號插入?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM