在JavaScript中,有两个特殊的类型存在,它们都只有一个值,分别null和undefined,之所以将它们放在一块,是因为在使用方面它们有很多相似之处。

相同点

在JavaScript中,null和undefined都表示“值的空缺”,两者往往可以互换,在希望值是布尔类型的地方它们的值都是假值。null和undefined都不包含任何属性和方法。甚至在JavaScript高级程序设计(3)中提出undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true:alert(null == undefined);  //true

不同点

由上面我们知道,位于null和undefined之间的相位操作符(==)总是返回true,尽管如此,但是null和undefined的用途是完全不同的。

undefined

当我们使用var声明一个变量但未对其进行初始化的时候,这个变量的值就是undefined,因此在实际运用中,没有必要将一个变量的值显示地设置为undefined。

需要区分的是,还有一种情况,那就是未定义的变量

运行上面的代码,对于声明了但未初始化的变量,会返回undefined,但是未声明的变量就会报错,也就是说,包含undefined值的变量和未定义的变量是不一样的。但是对于未初始化和未声明的这两种变量使用typeof操作符时,返回的都是undefined的,这是因为,不论哪一种都没有对变量执行真正的操作。

null

从逻辑角度看,null值表示一个空的对象指针,因此在使用typeof操作符检测null值的时候会返回“object”,但是null本身并不是对象。

因此在定义变量的时候,如果该变量准备在将来用于保存对象,那么最好将该变量初始化为null,这样一来,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的应用。

总结

undefined与报错(not defined)的区别

对象.属性:属性不存在则返回undefined

访问变量:变量不存在则报错,xx is not defined

 

什么时候给变量赋值为null 呢?

  1. 初始赋值, 表明这个变量我将要去赋值为对象
  2. 结束前, 这个对象不再使用时,让对象成为垃圾对象(被垃圾回收器回收)

通过上面的例子,我们不难发现,其实undefined更像是用来表示系统级、出乎意料的或类似错误的值的空缺,而null是表示程序的、正常的或者在意料之中的值的空缺,因此,如果我们需要将它们赋值给变量或者属性,或者将它们作为参数传入函数时,最佳选择是使用null。

参考资料

JavaScript权威指南(第六版)

JavaScript高级程序设计(第三版)

JavaScript王者归来

神奇的null和undefined的更多相关文章

  1. 判断一个值是否为null或者undefined

    var a=null; var b=undefined; if(a===null){ //a==null alert("a=null") }else{ alert("a= ...

  2. null和undefined的一些区别

    读了阮一峰的博客,自己总结一下,便记录一篇博客 在javacript的基本类型中,有2种基本类型,只有1个值,便是null和undefined,都表示的是"无".在一定程度上是相等 ...

  3. JS中判断null、undefined与NaN的方法

    写了个 str ="s"++; 然后出现Nan,找了一会. 收集资料如下判断: 1.判断undefined: 代码如下: <span style="font-siz ...

  4. V8 的 typeof null 返回 "undefined" 的 bug 是怎么回事

    1997 年,IE 4.0 发布,带来的众多新特性中有一个对未来“影响深远”的 DOM API:document.all.在随后的 6 年里,IE 的市场占有率越来越高,直到 2003 年的 95%. ...

  5. 【阿里李战】解剖JavaScript中的 null 和 undefined

    在JavaScript开发中,被人问到:null与undefined到底有啥区别? 一时间不好回答,特别是undefined,因为这涉及到undefined的实现原理.于是,细想之后,写下本文,请各位 ...

  6. null和undefined区别

    undefined表示不存在的状态.没有定义的变量,没有定义的对象属性,没有return的函数的返回值等等都是undefined. null表示没有对象.使用上没有差别,只是根据大众的使用习惯,场合不 ...

  7. null、undefined、false、0相等性比较

    之前在看<JavaScript权威指南>的时候看到三个相等性比较的式子: null == undefined ;// ==>true undefined == false;// == ...

  8. null和undefined区别(转)

    目前,null和undefined基本是同义的,只有一些细微的差别. null表示"没有对象",即该处不应该有值.典型用法是: (1) 作为函数的参数,表示该函数的参数不是对象. ...

  9. 字符串怎么换行 || 字符串中使用单引号时应该怎么写 || 保留两位小数 || 数字0在if中的意思是false || 什么情况下会会报undefined || null和undefined的区别 ||

    换行的字符串 "This string\nhas two lines" 字符串中使用单引号时应该怎么写 'You\'re right, it can\'t be a quote' ...

随机推荐

  1. Spring MVC和Spring Data JPA之获取数据表数据放在List集合,显示在JSP页面

    涉及到很多xml配置没写:只写具体实现的所有类 1.实体类 对应数据表SYS_SBGL, 主键是SBBM,主键是自动生成的uuid 数据表内容如下(有图有真相): package com.jinhet ...

  2. JQ延迟对象

    延迟对象初识 技术一般水平有限,有什么错的地方,望大家指正. ES6已经实现了延迟对象Promise,但是今天主角是JQ里面的延迟对象,套路其实都是差不多的.下面先看一个比较牵强的例子: <bu ...

  3. Redis 学习第一课:安装Linux Redis(Ubantu)

    对于分布式缓存,之前公司项目中只使用了MemCached,使用比较方便,有现成的C#版本组件. 如今用Redis的公司有很多,所以打算了解一下Redis. Redis的官网地址:http://redi ...

  4. stm32 继电器的配置

    你可以把继电器当成一个led来控制,只不过就是电路图不一样,但配置原理是一样的, 控制相对应的GPIO口,推挽输出,就行了,然后仿真一下就会发现哒哒哒的声音.

  5. Mr. Kitayuta's Colorful Graph CodeForces - 506D(均摊复杂度)

    Mr. Kitayuta has just bought an undirected graph with n vertices and m edges. The vertices of the gr ...

  6. Docker使用rexray做跨主机存储

    Rex-Ray 是一个优秀的 Docker volume driver,不过只有最新版docker才支持. Rex-Ray 以 standalone 进程的方式运行在 Docker 主机上,安装方法很 ...

  7. 简单介绍Spring的ContextLoaderListener

    在开发Spring的Web项目中,通常我们都会在web.xml中配置一个Spring的核心监听器,就是把Spring的IOC容器纳入Servlet容器中,配置如下: <listener> ...

  8. HDU 2108 逆时针给出多边形的顶点,判断是否为凸多边形,水题

    下面是别人解题报告的链接,很详细,写的很好 http://blog.csdn.net/chl_3205/article/details/8520597 下面贴我的代码 #include <cst ...

  9. hdu1224 dp(dp + 栈/父亲数组记录路径)

    题意:给定 n 个城市的有趣度,并给出可以从那些城市飞到那些城市.其中第一个城市即起始城市同样也作为终点城市,有趣度为 0,旅行途中只允许按有趣度从低到高旅行,问旅行的有趣度最大是多少,并输出旅行路径 ...

  10. javascript的单例模式

    单例模式是javascript最基本,最有用的模式之一,它提供了一种将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码通过单一的变量进行访问.我的理解是在这个作用域中,只有通过单一的变量来访问,不存 ...