== 和 === 在Js中的区别

349 阅读1分钟

大概理解:

关键点:===和==的规则类似,唯一少了转换的一步, ==是相等,先转换再比较,
===是全等,不转换就比较,
来看下《Javascript高级程序设计》关于==和===的规则

1.如果有一个操作数是布尔值,则在比较前先将其转换为数值,true转换为1,false转换为0,例如false == 0,true == 1
2.如果一个操作数是字符串,另一个操作数是数值,先将字符串转换成数值,例如"1"==1,'' ==0
3.如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型按照前面的规则进行比较。 (解释不清楚)
4.null和undefined是相等的。
5.如果有一个数是NaN,则相等操作符返回false,而不想等操作符返回true。NaN == NaN返回为false,因为规则如此。
6.如果两个操作数是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true,否则返回false。

例如:

var obj = {a:1};
foo = obj;bar = obj;
foo==bar;
foo==bar`

返回为true,因为他们指向同一个对象,obj。

具体的栗子

1, 基础类型vs基础类型

    `1== true       \\true
    `1 === true     \\false

2, 对象vs基础类型

   [] == false     \\true
   [] === false    \\false

3, 对象vs对象

    {age:6} == {age:6}      \\false
    {age:6} === {age:6}     \\false
    [1] == [1]              \\false
    [1] === [1]             \\false

4, null && undefined

    null==undefined   \\true
    null===undefined  \\false