JavaScript/自动分号插入
外观
自动分号插入 (ASI)
在 C 族 语言中,分号表示语句的结束。与其他类似 C 的语言不同,JavaScript 没有强制要求使用分号。相反,分号是可选的,解释器会添加缺少的分号,通常在行尾,以终止语句。这样做,它会考虑 复杂的规则。这可能会与预期的目的发生冲突。
如果您在语句末尾没有写分号,则必须注意出现问题的状况。以下是一些避免问题的经验法则。但还有很多其他规则。
return
、throw
或yield
关键字后的表达式必须与关键字位于同一行。break
或continue
后的标签标识符必须与关键字位于同一行。- 如果一行以
(
、[
、`
、+
、-
或/
开头,则在上一行末尾加上分号。
示例
输入代码 .. | .. 解释为 | 预期代码 |
---|---|---|
return
2a + 1
|
return;
2a + 1;
|
return 2*a + 1;
|
function getObject() {
return
{
// some lines
}
}
|
function getObject() {
return;
{
// some lines
};
}
|
function getObject() {
return {
// some lines
};
}
|
i
++
|
i;
++;
|
i++;
|
在第一种情况下,程序员想要返回 2*a + 1;相反,代码返回了 undefined
。类似地,在第二种情况下,程序员想要返回由大括号 {}
包含的行,但代码返回了 undefined
。由于 JavaScript 的这种奇特性,建议始终不要在语句中换行,也不要将左大括号放在单独的一行。