在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. php json 解析有stdClass Object 解决办法

    php json 解析有stdClass Object mixed json_decode ( string $json [, bool $assoc = false [, int $depth = ...

  2. C++中的接口继承和实现继承

    很多人认为,C++中是不存在接口继承的,只有Java.C#这类语言才提供了相应的语法支持. 但是,如同鲁迅说过的某句名言:世上本没有接口继承,用的人多了,才有了接口继承.C++中依然可以实现接口继承, ...

  3. 20165210 Java第八周学习总结

    20165210 Java第八周学习总结 教材内容学习 - 第十二章学习总结 进程与线程 操作系统与进程 Java中的线程 Java的多线程机制 主线程 线程的状态与生命周期 1. 新建 2. 运行 ...

  4. 2019.1.11 EDVT

    Processing Gain and Occupied Bandwidth ESA Basic Setup (11b)Span 110MHzRBW 100kHzVBW 100kHzSweep Tim ...

  5. 强大的安卓手机远程管理工具 – Droidjack

    免责声明:本站提供安全工具.程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! Droidjack是一款针对安卓手机远程管理工具,你可以利用它在PC上对手机进行远程操控,不仅功能强大,使用 ...

  6. nodejs 安装出错总结

    1.npm无法安装模块,重新安装nodejs之前要 删除node下的文件(主要是npm包,不然安装是徒劳) 2.npm config list -l 查看git配置 3. Downloading bi ...

  7. memcpy - how to copy float* to float* variable

    how to copy float* to float* float* seg_segmap = new float[OUTPUT_H * OUTPUT_W]; float* temp = new f ...

  8. POJ 3069:Saruman's Army

    Saruman's Army Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13242   Accepted: 6636 D ...

  9. python--selenium多线程执行用例实例/执行多个用例

    python--selenium多线程执行用例实例/执行多个用例 我们在做selenium测试的时候呢,经常会碰到一些需要执行多个用例的情况,也就是多线 程执行py程序,我们前面讲过单个的py用例怎么 ...

  10. JQuery 基本知识,选择器,事件,DOM操作

    一.基本知识 Jquery是什么? 它就是一套JS方法包,jQuery是一个快速,小巧,功能丰富的JavaScript库.它使得HTML文档遍历和操作,事件处理,动画和Ajax更容易使用易于使用的AP ...