逻辑与循环
始终使用 === 替代 ==
例外: obj == null 可以用来检查 null || undefined
if (name === 'John') // ✓ 正确
if (name == 'John') // ✗ 错误
if (name !== 'John') // ✓ 正确
if (name != 'John') // ✗ 错误
避免将变量与自己进行比较操作
if (score === score) {} // ✗ 错误
if/else 关键字要与花括号保持在同一行
// ✓ 正确
if (condition) {
// ...
} else {
// ...
}
// ✗ 错误
if (condition)
{
// ...
}
else
{
// ...
}
多行 if 语句的的括号不能省略
// ✓ 正确
if (options.quiet !== true) console.log('done')
// ✓ 正确
if (options.quiet !== true) {
console.log('done')
}
// ✗ 错误
if (options.quiet !== true)
console.log('done')
对于三元运算符 ? 和 : 与他们所负责的代码处于同一行
// ✓ 正确
const location = env.development ? 'localhost' : 'www.api.com'
// ✓ 正确
const location = env.development
? 'localhost'
: 'www.api.com'
// ✗ 错误
const location = env.development ?
'localhost' :
'www.api.com'
请书写优雅的条件语句(avoid Yoda conditions)
if (42 === age) { } // ✗ 错误
if (age === 42) { } // ✓ 正确
避免使用常量作为条件表达式的条件(循环语句除外)
if (false) { // ✗ 错误
// ...
}
if (x === 0) { // ✓ 正确
// ...
}
while (true) { // ✓ 正确
// ...
}
循环语句中注意更新循环变量
for (let i = 0; i < items.length; j++) {...} // ✗ 错误
for (let i = 0; i < items.length; i++) {...} // ✓ 正确
如果有更好的实现,尽量不要使用三元表达式
let score = val ? val : 0 // ✗ 错误
let score = val || 0 // ✓ 正确
switch 语句中不要定义重复的 case 分支
switch (id) {
case 1:
// ...
case 1: // ✗ 错误
}
switch 一定要使用 break 来将条件分支正常中断
switch (filter) {
case 1:
doSomething() // ✗ 错误
case 2:
doSomethingElse()
}
switch (filter) {
case 1:
doSomething()
break // ✓ 正确
case 2:
doSomethingElse()
}
switch (filter) {
case 1:
doSomething()
// fallthrough // ✓ 正确
case 2:
doSomethingElse()
}
避免不必要的布尔转换
const result = true
if (!!result) { // ✗ 错误
// ...
}
const result = true
if (result) { // ✓ 正确
// ...
}
避免使用逗号操作符
if (doSomething(), !!test) {} // ✗ 错误