大概理解:
关键点:===和==的规则类似,唯一少了转换的一步,
==是相等,先转换再比较,
===是全等,不转换就比较,
来看下《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