在JavaScript中,undefined
以及null
同样是表示空值(没有实际意义)。
undefined == null;
事实上,上面这段代码的返回结果也是true
,然后他们俩有什么区别吗,首先是语义上面的区别,undefind
在JavaScript中表示的是已经声明了,但是没有赋值,相当于是对只是被声明了的状态的表示,是的没错,我更愿意把他理解为一种状态,而null
就更像是一个值了,他表示的就是一个空,就是啥都没有,实际上也是一种状态(至少我是这么理解的)。
NaN
也是一个比较有趣的值。
在执行自比较之中:NaN,也只有NaN,比较之中不等于它自己。
我的理解是他是一种表示错误的值,他的存在就是为了表示JavaScript中数值的运算错误。就像当于是在遇到数值运算的错误时,不终止程序的执行(对,我们的JavaScript真真的是个老好人),只是把这个错误作为一个值抛出来
最后再讲一下子引用值,和原始值不同,我们是没有办法直接访问到他的,我们只能通过一个指针来访问引用值,引用值类型有Funtion
Object
Array
这三种,在引用值的比较,他并没有去找到指针所指的原始值然后在进行比较,而是比较这个指针(怎么这次就不去找指针所指的值了呢)。
所以即使是有时候我们把两个引用值来进行比较,即使这两个值是相等的,但是应用的指针不是同一个,所以比较的时候还是还反悔false
.
obj1 = {};
obj2 = {};
if(obj1 === obj2) {
console.log("true");
}
else {
console.log("false");
}
这里的结果看起来应该是true
对吧,但是他的实际结果是false
,原因就是因为,这里的比较不是比较的那个存储空间所存储的值,而是比较的那个存储空间的位置(也就是那个指针)。
但是吧对于{} === {}
的返回值却是false
,这里还是有一点以后。。。