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

原文地址:https://www.cnblogs.com/freesfu/p/10095566.html

时间: 2024-08-29 00:08:37

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

js判断undefined类型,undefined,null,NaN的区别

js判断undefined类型今天使用showModalDialog打开页面,返回值时.当打开的页面点击关闭按钮或直接点浏览器上的关闭则返回值是undefined   所以自作聪明判断       var reValue=window.showModalDialog("","","");      if (reValue== undefined){     alert("undefined");     }   发现判断不出来

javascript数组去重(undefined,null,NaN)

数组去重记录: 1.indexOf 方法,无法识别NaN 1 var ary = [false, true, undefined, null, NaN, 0, 1, 1, "1", "1", {}, {}, "a", "a", NaN]; 2 3 Array.prototype.uniq = function() { 4 var _this = this; 5 return _this.filter(function(item

Javascript 中的非空判断 undefined,null, NaN的区别

原出处:http://blog.csdn.net/oscar999/article/details/9353713 JS 数据类型 在介绍这三个之间的差别之前, 先来看一下JS 的数据类型. 在 Java ,C这样的语言中, 使用一个变量之前,需要先定义这个变量并指定它的数据类型,是整型,字符串型,.... 但是在js 中定义变量统一使用 var , 或者不使用var 也可以使用. 那么js 中是否有数据类型的概念呢? 当然有, 使用 typeof 就可以判断这个变量的数据类型: [javasc

JavaScript 中undefined,null,NaN的区别

1.类型分析: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型.var a1;var a2 = true;var a3 = 1;var a4 = "Hello";var a5 = new Object();var a6 = null;var a7 = NaN;var a8 = undefined;alert(typeof a); //显示"undefined"alert(typ

undefined,null,NaN区别

1.类型分析:js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型.var a1;var a2 = true;var a3 = 1;var a4 = "Hello";var a5 = new Object();var a6 = null;var a7 = NaN;var a8 = undefined;alert(typeof a);    //显示"undefined"alert(t

【JS】undefined,null,NaN的区别

undefined: 未定义的值和定义未赋值的  不存在的对象属性 null: 是一种特殊的object 表示无值 NaN: 是一种特殊的number 1)undefined与null是相等:(2)NaN与任何值都不相等,与自己也不相等. 只能用 === 运算来测试某个值是否是未定义的,因为 == 运算符认为 undefined 值等价于 null. 还可以用typeof来判断 typeof(e) == "undefined"

Javascript中的null、undefined、NaN

1.判断彼此是否相等 function btnClick(){     alert(null == null);//true     alert(undefined==undefined);//true     alert(NaN==NaN);//false } 总结: (1)两个null是相等的 (2)两个undefined是相等的 (3)两个NaN是不相等的 function btnClick(){     alert(null == undefined);//true     alert(

js运行机制 值引用 值传递

1.js是单线程的  为什么是单线程的呢  因为js作为浏览器脚本语言,会有很多和用户的互动,以及操作dom,多个线程会出问题. 2.js有同步任务,异步任务(ajax,用户点击等,settimeout) 异步任务执行机制: a.同步任务都在主线程上执行,形成执行栈: b.主线程外,存在一个任务队列,(虽然js是单线程的,但是浏览器内核是多线程的,在浏览器内部中不同异步操作由不同内核模块调度执行,异步操作回将相关操作添加到任务队列上,不同异步操作添加到任务队列的时机也是不同的 onclick--

javaScript的引用值和原始值的存放位置

在js中变量可以存放两种值也就是原始值和引用值 五大原始值:number String null  boolean undefind 引用值:例如 function arry  data  Object RegExp 原始值和引用值他们的存放位置是不一样的,原始值存放在栈内存中,而引用值存放在堆内存中 原始值的实例: 当我们定义了一个变量 例var  a = 123:然后再定义一个b将a赋予b :然后在改变a的值   a = 234 :分别alert弹出a ,b  .a的值是234 :  b的值