==表示判断值是否相同
===表示判断值类型是否相同,如果类型是相同的,判断地址是否相同。
总之===
里面只要有一个不等就是false
下面举几个经典的例子方便我们更好的理解:
eg1:
console.log(NaN == NaN);//false
console.log(NaN === NaN);//false
console.log(this == window);//true
console.log(this === window);//true
console.log(null == undefined);//true
console.log(null === undefined);//false
console.log([] == []);//false
console.log([] === []);//false
console.log({} == {});//false
console.log({} === {});//false
NaN是因为不是数字的有很多个不能确定值所以是false
null和undefined都是空,所以值是相同的。
但是他们的地址指向是不同的,null指向的是空所以===
是false
引用类型都是不同的,因为在堆内存中都是重新创建的。
eg2:
function Person(name) {
this.name = name;
this.say = () => {
console.log(this.name);
}
}
let a = new Person('xz');
let b = new Person('xz')
console.log(a.say());
console.log(a.say === b.say);
console.log(a.say() === b.say());
console.log(a.name===b.name);
上述代码中需要用到堆栈图来理解
由上图的堆栈图可以看出原因,这里我就不做过多解释了。
另外同理可得
let a = new Array(1,2,3)
let b = new Array(1,2,3)
console.log(a==b);//false
console.log(a===b);//false
console.log(a[0]==b[0]);//true
console.log(a[0]===b[0]);//true