Javascript的数据类型包括数字、字符串、布尔值、null、undefined和对象。其中null和undefined是两种特殊的原始类型,很容易混淆。今天就来剖析一下null和undefined这两种数据特殊类型的区别。

null

null是Javascript的关键字,它通常用来描述空值

console.log(typeof null);//打印出"object"

可以看出null是一个特殊的对象,含义是“非对象”。可以认为null是它自有类型的唯一一个成员,它可以表示数字、字符串、对象是“无值”的。因为null没有其他属性和方法了,比如说执行null.length,会报错:TypeError: Cannot read property 'length' of null。

null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:

886 + null    //
123 * null    //

undefined

undefined不是Javascript的关键字。undefined用未定义的值表示更深层次的“空值”。它是变量的一种取值,表面变量没有初始化。如果要查询对象属性或数组元素的值时返回undefined,说明这个属性或元素不存在。如果函数没有返回值,则返回undefined。引用没有提供实参的函数,函数形参的值也只会是undefined。在ECMAScript5中,undefined是只读的。typeof undefined,会返回“undefined”,表明“undefined”是这个类型的唯一成员。

尽管null和undefined是不同的,但它们都表示“值的空缺”,两者往往可以互换。

null == undefined;//返回ture
null === undefined;//返回false

另外,关于Javascript我还遇到一个有意思的现象:

"" ==  0; //return true
"" === 0; //return false
"" == "0"; //return false

第一句比较怪异。原因是这样的,“==”是松散比较,也就是说如果比较的双方类型不一致,Javascript会先把它们转成同一类型,再做严格比较。如果双方中有一个为数字类型或布尔类型,则javascript会将它们转成数字类型或布尔类型,如果双方中有string类型而没有数值类型或布尔类型,则会把不是string类型强制转换为string类型。这段代码的第一句,比较双方是""和0,""会被强制转成Number型0,所以

"" ==  0。

参考:

《JavaScript权威指南》44-45页

区分JS中的undefined,null,"",0和false

http://www.cnblogs.com/birdshome/archive/2005/03/04/111991.html

解剖JavaScript中的null和undefined

http://blog.csdn.net/leadzen/article/details/3899392

stackoverflow

http://stackoverflow.com/questions/12422064/why-javascript-treats-0-equal-to-empty-string

Javascript null和undefined的更多相关文章

  1. JavaScript null 和 undefined

    null null 表示一个变量被声明了,并被赋值为空 var lzh = null; console.log(lzh); // null console.log(typeof lzh); // ob ...

  2. JavaScript null和undefined的区别

    前言 1995年javascript诞生时,最初像Java一样,只设置了null作为表示"无"的值.根据C语言的传统,null被设计成可以自动转为0 但是,javascript的设 ...

  3. JavaScript null and undefined

    http://stackoverflow.com/questions/6429225/javascript-null-or-undefined var x; x == null // true x = ...

  4. javascript null vs undefined

    这个是很古老的问题了. 一直存在争议,有些人认为,很多语言没用 undefined 也活的好好,为啥要 undefined 呢. 那有了 undefined 是否还需要 null 呢 ? typesc ...

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

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

  6. 细说Javascript之null、undefined和NaN

    首先简单介绍一下Javascript中的数据类型,Javascript中的数据类型有undefined,boolen,number,string和object等5种,前4种是原始类型,第5种是引用类型 ...

  7. 【温故而知新-Javascript】比较 undefined 和 null 值

    JavaScript 中有两个特数值: undefined和null,在比较它们的时候需要留心.在读取未赋值的变量或试图读取对象没有的属性时得到的就是 undefined 值. <!DOCTYP ...

  8. Javascript 中的false、0、null、undefined和空字符串对象

    在Javascript中,我们经常会接触到题目中提到的这5个比较特别的对象——false.0.空字符串.null和undefined.这几个对象很容易用错,因此在使用时必须得小心. 类型检测 我们下来 ...

  9. 区别Javascript中的Null与Undefined

    在JavaScript中存在这样两种原始类型:Null与Undefined.这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是Undefined? Undef ...

随机推荐

  1. JS常用的设计模式(14)—— 备忘录模式

    备忘录模式在js中经常用于数据缓存. 比如一个分页控件, 从服务器获得某一页的数据后可以存入缓存.以后再翻回这一页的时候,可以直接使用缓存里的数据而无需再次请求服务器. 实现比较简单,伪代码: var ...

  2. git备忘(长久更新)

    一直想了解一下git,正好最近的有一个问题就是,实验室写的代码,怎么同步到自己宿舍的笔记本上面来.最开始想用dropbox,但是用VS的人都知道,工程文件里面会给你生成乱七八糟的很多东西,很占空间,d ...

  3. MyEclipse中使用debug调试程序

    最基本的操作是:       1.首先在一个java文件中设断点,然后debug as-->open debug Dialog,然后在对话框中选类后--> Run       当程序走到断 ...

  4. CentOS6.4安装Smokeping节点监控软件

    Smokeping:它是rrdtool的作者制作的,在图形显示方面很漂亮,可以用来很好的检测网络状态和稳定性,下面简单说一下Smokeping的安装以及配置方法. 0.首先关闭selinux和防火墙 ...

  5. ping通网关 ping不能外网  DNS无法解析

       ###ping通网关 ping不能外网  DNS无法解析 客户上不了网 DNS解析不了  首先登陆机器 先查看IP  然后看dns是否正常 然后测试ping网关  ping外网 nslookup ...

  6. 设置ShowDialog

    1.在winform窗体中的button控件,可以直接设置DialogResult属性为OK或者Cancel来控制其他窗口中调用此窗口需要验证DialogResult结果是OK还是其他....

  7. HBase分布式安装

    安装HBase之前需要先安装Hadoop,因为HBase是运行在Hadoop集群上的.安装Hadoop可以参照http://www.cnblogs.com/stGeekpower/p/3307289. ...

  8. MIME类型

    多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符.二进制格式附件等多种格 ...

  9. MongoDB中通过MapReduce实现合计Sum功能及返回格式不一致问题分析

    建立下述测试数据,通过MapReduce统计每个班级学生数及成绩和. 代码如下: public string SumStudentScore() { var collection = _dataBas ...

  10. Delphi中TStringList类常用属性方法详解

    TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delim ...