请问为什么test1和3输出是false?
对象存储在堆里,每个指针对应一个存储位置,他们虽然长得很像,但是指针对应的地址不同,所以不能用"=="更不能"===";顺便提一下,js没有指针的概念,可以借助C中的指针理解
因为他们地址不同。
test1 = {};
test2 = {};
test3 = test2;
其中test1是一个对象,test2和test3是另一个对象。
他们只是内容相同,不能说明他们是同一个对象。
var myData1 = {name:"Adam",weather:"sunny"}
相当于
var myData1 = new Object();myData1.name = "Adam";myData1.weather = "sunny";
其实就是一个对象的实例,每个实例都指向一块新的内存地址
原始值 (primitives
):undefined
null
boolean
number
string
。
对象值 (objects
):除了原始值外,其他的所有值都是对象类型的值,包括数组 (array
) 和函数 (function
) 等。
==: 用于一般比较,比较的时候可以进行转换数据类型。
===` :用于严格比较,只要类型不匹配就返回false。
因为 ==
左边和右边都为对象值,比较的是两个引用值在内存中是否是同一个对象,虽然myData1 与 myData2值相同,但确是两个互不相关的对象,自然 ==
为false
。
其实 ==
都返回了false
,对于 ===
自然也是false
,判断依据同是两个值引用的不是同一个对象
判断两个对象值是否相同就是看引用地址是否相同。
==
与 ===
的区别在处理原始值的时候是有区别的,而对于两边都是对象值时就相同了。
参考地址:[1]
参考资料:[2]
相等操作符(==)会强行转换类型。
1.如果一边是对象,另一边不是,那么会按照调用valueOf、toString
方法返回基本类型数值,如果没有,则为NaN
。
2.如果两边都是对象,那么就看引用的对象是否相同。
显然这两个对象只是数值一样,但是指针是不同的,所以用(==)判断是false
而(===)全等操作符不会转换类型,是一种严格比较,既然引用的指针都不同,那么(===)肯定就是false
。
13 回答12.8k 阅读
7 回答2k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答921 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
js中
{}
、[]
指向的是内存中的一个地址,{}
、[]
进行比较的时候=
判断的是地址是否相等,而不是内容