JavaScript之“==”和“===”

 == 和 === 都是比较运算符。它们有什么区别?

===

  • 如果类型不同,就一定不相等。
  • 如果两边都是数值,且值相等,则返回trueNaN 除外。)
  • 字符串、布尔类型相等,对比值相等,则相等。
  • 如果引用同一个对象或数组,则相等,否则不等。
  • 如果两个都是nullundefined 则相等,否则不等。

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

参考网址

有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。
原文地址:https://www.cnblogs.com/luyj00436/p/15177776.html