日期:2014-05-16 浏览次数:20403 次
如果是基本类型 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存的也是对象的地址,它们两个地址空间一定不同,这是比较地址空间,所以为false xiaoming === 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型,他们两个值是相等的,所以为true null === 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