关于undefined,null,NaN,以及引用值的一点小记

在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,这里还是有一点以后。。。

posted @ 2018-12-10 11:42  秦晓  阅读(197)  评论(0编辑  收藏  举报