假设我想设置一组等于null的变量(并且不想使用数组/循环结构)或者我只想在多行中编写一个大的布尔表达式。在这种情况下,未公开的括号是否会阻止分号插入? E.g。
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 +)最标准的方式。
答案 0 :(得分:2)
只有在没有分号的情况下语法错误的代码才会发生分号插入。在你的情况下,表达式是完全有效的,所以你不必担心分号插入 - 括号或不括号。
将以分号插入的示例:
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关键字和表达式的开头之间,所以不允许换行符。在表达式中,这不是问题。
答案 1 :(得分:1)
在这种情况下,未公开的括号是否会阻止分号插入?
是。虽然没必要:
与使用
&&
或||
或=
在换行符上对表达式进行分组相比,这是如何比较的?
它完全一样。它们是需要第二部分的表达式,因此ASI不能 - 不得 - 在不使结果无效的情况下启动。
当连续行无效而没有分号时,ASI将仅 。有关详细信息,请参阅What are the rules for JavaScript's automatic semicolon insertion (ASI)?。