[Easy] 📄 JavaScript Operators
1. What is the difference between == and === ?
==和===有什么差异?
两者都是比较运算符号,== 是比较两个值是否相等,=== 是比较两个值是否相等且类型也相等。因此后者也可以视为严格模式。
其中前者受限于 JavaScript 的设计,会自动转换类型,导致出现很多不直觉的结果,例如:
1 == '1'; // true
1 == [1]; // true
1 == true; // true
0 == ''; // true
0 == '0'; // true
0 == false; // true
这对开发者来说,是很大的心智负担,因此普遍建议使用 === 来取代 ==,避免预期外的错误。
最佳实践:永远使用 === 和 !==,除非你非常清楚为什么要用 ==。
面试题目
题目 1:基本类型比较
试判断以下表达式的结果:
1 == '1'; // ?
1 === '1'; // ?
答案:
1 == '1'; // true
1 === '1'; // false
解析:
==(相等运算符):会进行类型转换- 字串
'1'会被转换为数字1 - 然后比较
1 == 1,结果为true
- 字串
===(严格相等运算符):不进行类型转换number和string类型不同,直接返回false
类型转换规则:
// == 的类型转换优先顺序
// 1. 如果有 number,将另一边转为 number
'1' == 1; // '1' → 1,结果 true
'2' == 2; // '2' → 2,结果 true
'0' == 0; // '0' → 0,结果 true
// 2. 如果有 boolean,将 boolean 转为 number
true == 1; // true → 1,结果 true
false == 0; // false → 0,结果 true
'1' == true; // '1' → 1, true → 1,结果 true
// 3. 字串转数字的陷阱
'' == 0; // '' → 0,结果 true
' ' == 0; // ' ' → 0,结果 true(空白字串转为 0)
题目 2:null 和 undefined 的比较
试判断以下表达式的结果:
undefined == null; // ?
undefined === null; // ?
答案:
undefined == null; // true
undefined === null; // false
解析:
这是 JavaScript 的特殊规则:
undefined == null