分号插入¶
ID: js/automatic-semicolon-insertion
Kind: problem
Security severity:
Severity: recommendation
Precision: very-high
Tags:
- maintainability
- language-features
- statistical
- non-attributable
Query suites:
- javascript-security-and-quality.qls
JavaScript 中的一些语句不需要显式分号终止;解析器会在遇到换行符时隐式插入分号。这是一个危险的功能,因为它可以掩盖细微的错误并使读者迷惑;不应依赖它。
建议¶
将隐式插入的分号明确化。
示例¶
在以下代码片段中,程序员很可能想返回一个具有单个属性status
的对象字面量。
function f() {
return
{
status: 'OK'
}
}
然而,由于return
关键字之后有一个换行符,解析器会在return
之后插入一个隐式分号;然后,对象字面量被解释为一个包含单个语句的块,该语句的标签为status
。由于它紧跟在return
之后,此块当然永远不会执行,并且该函数现在返回undefined
,而不是返回一个对象字面量。
为了修复此错误,对象字面量的左大括号应放在与return
关键字相同的行上
function f() {
return {
status: 'OK'
};
}
参考资料¶
D. Crockford,JavaScript: The Good Parts,附录 A.3。O’Reilly,2008。