JavaScript编程
Completion requirements
自动分号插入(ASI)
在 C 系列语言中,分号表示语句的结束。与其他类似 C 的语言不同,JavaScript 并不强制要求分号的使用。相反,分号是可选的,解释器会自动插入缺失的分号——通常是在行末——以终止语句。在此过程中,解释器会考虑复杂的规则,这可能与开发者的预期产生冲突。
如果你在编写代码时没有在语句末尾加上分号,你必须小心可能出现的问题。以下是一些避免问题的经验法则,但实际上还有更多规则。
- 在
return
、throw
或yield
关键字后面的表达式必须与关键字位于同一行。 - 在
break
或continue
后的标签标识符必须与关键字位于同一行。 - 如果一行以
(
、[
、`
、+
、-
或/
开头,前一行必须以分号结尾。
示例
输入代码 | 解释后的代码 | 意图代码 |
---|---|---|
return 2a + 1 |
return; 2a + 1; |
return 2*a + 1; |
function getObject() { return { ... } } |
function getObject() { return; { ... } }; |
function getObject() { return { ... }; } |
i++ |
i; ++i; |
i++; |
在第一个示例中,程序员本意是返回 2*a + 1
,但由于分号插入,代码返回了 undefined
。同样,在第二个示例中,程序员打算返回大括号 {}
内的内容,但代码返回了 undefined
。由于 JavaScript 中的这个怪异行为,最佳实践是避免在语句内换行,并且不要将左花括号 {
放在单独的一行。
参见
Last modified: Monday, 13 January 2025, 3:01 PM