* [强制] 在相等表达式 中使用类型严格的 === , 仅当判断null或者undefined时,使用==, 使用===可以避免等于判断中隐式的类型转换
```
// good
if (age === 30) {
// ......
}
// bad
if (age == 30) {
// ......
}
```
* 不过还是建议尽量使用===,== 可能会带来一些违反直觉的后果。比如我们常使用的对象,有时获取不到而被赋值为undefine的情况。
```
var obj = undefined;
if(obj == null){
console.log("1"); // 执行
}
if(obj === null){
console.log("2"); // 不执行
}
```
* [建议] 尽可能使用简洁的表达式。
```
// 字符串为空
// good
if (!name) {
// ......
}
// bad
if (name === '') {
// ......
}
// 字符串非空
// good
if (name) {
// ......
}
// bad
if (name !== '') {
// ......
}
// 数组非空
// good
if (collection.length) {
// ......
}
// bad
if (collection.length > 0) {
// ......
}
// 布尔不成立
// good
if (!notTrue) {
// ......
}
// bad
if (notTrue === false) {
// ......
}
// null 或 undefined
// good
if (noValue == null) {
// ......
}
// bad
if (noValue === null || typeof noValue === 'undefined') {
// ......
}
```
* [建议] 对于相同变量或表达式的多值条件,用 switch 代替 if。
```
// good
switch (typeof variable) {
case 'object':
// ......
break;
case 'number':
case 'boolean':
case 'string':
// ......
break;
}
// bad
var type = typeof variable;
if (type === 'object') {
// ......
}
else if (type === 'number' || type === 'boolean' || type === 'string') {
// ......
}
```
* [建议] 如果函数或全局中的 else 块后没有任何语句,可以删除 else。
```
// good
function getName() {
if (name) {
return name;
}
return 'unnamed';
}
// bad
function getName() {
if (name) {
return name;
}
else {
return 'unnamed';
}
}
```