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 的这种奇特性,建议始终不要在语句中换行,也不要将左大括号放在单独的一行。