js === 和 == 的区别
如果是基本类型var a=5;var b=5;a===b 的结果是true a==b 的结果是true var a=”qq”;var b=”qq”;a===b 和 a==b 的结果相同true === true 和 true ==true 的结果相同false === false 和 false == false 的结果相同下面是对象类型的比较var xiaoming = {name:'xiaoming', age:15};var xiaoming2 = {name:'xiaoming', age:15};xiaoming == xiaoming2 的结果是false ,值是一样的,为什么比较的时候是false呢? 因为xiaoming存的是一个对象的地址,xiaoming2存的也是对象的地址,它们两个地址空间一定不同,这是比较地址空间,所以为falsexiaoming === xiaoming2 结果是false ===本来就是比较地址 var xiaoming = {name:'xiaoming', age:15};var xiaoming2 =xiaoming;xiaoming == xiaoming2 为true; 两个变量引有一个地址xiaoming === xiaoming2 为true; 两个变量引有一个地址总结:基本类型都是值的比较所以没有区别,引有类型都是地址的比较所以没有区别。 现在我们看下它们的不同 如果是基本类型“5” === 5 结果是false 为什么呢?因为类型不同,说明不是一个地址“5”==5 结果是 true 为什么呢? 因为 “5”在比较前会ValueOf()为Number型,他们两个值是相等的,所以为truenull === undefined 结果为false 为什么呢? 因为类型不同,说明不是一个地址nul == undefined 结果为true 为什么呢?他们两个值是相等的“1” === true 结果是false, 一定是false没有疑问“1” == true 结果为true 为什么呢?"1"为ValueOf()为1,true的值也为转化为1 ,所以值相等var xiaoming = {name:'xiaoming', age:15};var age = 15;xiaoming.age == age; 结果是true 值比较xiaoming.age === age;结果为true 地址比较 //我们以前对象的属性和变量是没有区别的,这里其实还是基本类型比较基本类型总结:值比较用尽量用== 地址比较用尽量用=== 题外话: NaN == NaN 为false NaN === NaN为false ,为什么有这种情况呢? NaN的意思是not a Number 不是一个数,所以不能比较 如果要判断一个变量是不是一个数用isNaN()函数var a= 5;isNaN(a); //这里应该是false,因为a是一个数,不是数的时候才是true