== 和 === 都是比较运算符。它们有什么区别?
===
- 如果类型不同,就一定不相等。
- 如果两边都是数值,且值相等,则返回true (NaN 除外。)
- 字符串、布尔类型相等,对比值相等,则相等。
- 如果引用同一个对象或数组,则相等,否则不等。
- 如果两个都是null 或undefined 则相等,否则不等。
NaN属性用来表示非数字的字符,只能用方法isNaN()判断。因为每个NaN都不同。
==
- 如果类型相同,则规则与“===”已知,比较值是否相同。
- 如果类型不同,也有可能相等。
- 如果一个为null,一个为undfined,两个值相等。
- 如果一个是字符串,一个是数值,把字符串转换为数值后再比较。
根据以上的规则,举例子,以便于理解。
1 // 变量类型相同 2 console.log(false == false); // true(布尔类型) 3 console.log(false == false); // true(布尔类型) 4 console.log(1 == 1); // true(数字类型) 5 console.log(1 === 1); // true(数字类型) 6 console.log("hello" == "hello"); // true(字符串) 7 console.log("hello" === "hello"); // true(字符) 8 // 变量类型相同-(对象或数组、方法) 9 var arr1 = [1, 2, 3, 4, 5]; 10 var arr2 = [1, 2, 3, 4, 5]; 11 var arr3 = arr1; 12 console.log("同一个数组=>", arr1 == arr3); // true (同一个数组,返回true) 13 console.log("同一个数组=>", arr1 === arr3); // true (同一个数组,返回true) 14 console.log("不同数组=>", arr1 == arr2); // false (不同数组,值相同,返回false) 15 console.log("不同数组=>", arr1 === arr2); // false (不同数组,是相同,返回false) 16 // null 和undefined 17 console.log(null == null); // true 18 console.log(null === null); // true 19 console.log(undefined == undefined); // true 20 console.log(undefined === undefined); // true 21 console.log(null == undefined); // true 22 console.log(null === undefined); // false 23 var a; // 声明值,初始化为undefined 24 var b; // 声明值,初始化为undefined 25 console.log(a == b); 26 console.log(a === b); 27 28 // 变量类型不同 29 console.log(5 == "5"); // true (变量类型不同,转换为相同的比较) 30 console.log(5 === "5"); // false (变量类型不同,则值不同) 31 // NaN——非数字字符 32 console.log(NaN == NaN); // false 33 console.log(NaN === NaN); // false