Javascript null和undefined
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的更多相关文章
- JavaScript null 和 undefined
null null 表示一个变量被声明了,并被赋值为空 var lzh = null; console.log(lzh); // null console.log(typeof lzh); // ob ...
- JavaScript null和undefined的区别
前言 1995年javascript诞生时,最初像Java一样,只设置了null作为表示"无"的值.根据C语言的传统,null被设计成可以自动转为0 但是,javascript的设 ...
- JavaScript null and undefined
http://stackoverflow.com/questions/6429225/javascript-null-or-undefined var x; x == null // true x = ...
- javascript null vs undefined
这个是很古老的问题了. 一直存在争议,有些人认为,很多语言没用 undefined 也活的好好,为啥要 undefined 呢. 那有了 undefined 是否还需要 null 呢 ? typesc ...
- 【阿里李战】解剖JavaScript中的 null 和 undefined
在JavaScript开发中,被人问到:null与undefined到底有啥区别? 一时间不好回答,特别是undefined,因为这涉及到undefined的实现原理.于是,细想之后,写下本文,请各位 ...
- 细说Javascript之null、undefined和NaN
首先简单介绍一下Javascript中的数据类型,Javascript中的数据类型有undefined,boolen,number,string和object等5种,前4种是原始类型,第5种是引用类型 ...
- 【温故而知新-Javascript】比较 undefined 和 null 值
JavaScript 中有两个特数值: undefined和null,在比较它们的时候需要留心.在读取未赋值的变量或试图读取对象没有的属性时得到的就是 undefined 值. <!DOCTYP ...
- Javascript 中的false、0、null、undefined和空字符串对象
在Javascript中,我们经常会接触到题目中提到的这5个比较特别的对象——false.0.空字符串.null和undefined.这几个对象很容易用错,因此在使用时必须得小心. 类型检测 我们下来 ...
- 区别Javascript中的Null与Undefined
在JavaScript中存在这样两种原始类型:Null与Undefined.这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是Undefined? Undef ...
随机推荐
- EPPB also support BlackBerry device
各位看倌不是小弟要賣弄英文,實在是外國朋友希望知道上一篇"雲取證"中所用的工具Elcomsoft Phone Password Breaker支援黑莓機否?又要求非要看到截屏才算數 ...
- php+mysql简单留言,适合新手
<html> <head> <title> php留言板 </title> <style> p,textarea{vertical-alig ...
- 022 ARM寄存器详解
R13:堆栈指针寄存器 SP R14:链接寄存器 LR R15:程序计数器 PC指针 CPSR:当前程序状态寄存器 SPSR:备份程序状态寄存器
- Python之路【第八篇】:堡垒机实例以及数据库操作
Python之路[第八篇]:堡垒机实例以及数据库操作 堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient ...
- SE11
自省数据及表存储 2014年4月6日 21:37 类似JAVA反射的特性 SAP提供自省数据的机制 这样可以保证程序的灵活性和动态性 1.使用OO中的cl_abap_typed ...
- sublime text2支持ng
这里面记录了sublime text3的一些破解和sublime text2支持ng的方法. http://weblogs.asp.net/dwahlin/archive/2013/08/30/usi ...
- redmine添加自定义属性
使用redmine创建问题的时候,可能会发现没有我们需要的属性,这时候我们可以添加自定义的属性. 以添加满意度属性为例: 1.进入redmine管理界面,选择自定义属性 2.选择问题下面的新建自定义属 ...
- 快速清理Visual Studio起始页最近打开项目
清除vs2008起始页最近打开项目 第一种:最简单的方式: 把以下内容保存为.bat批处理文件 @echo off@REG Delete HKCU\Software\Microsoft\VisualS ...
- 《第一行代码--Android》阅读笔记之界面设计
1.单位dp.dip.sp.pt.px.in.mm 这里引用StackOverFlow上的一个解答: px is one pixel. sp is scale-independent pixels. ...
- C++列出完数
题目内容:自然数中,完数寥若晨星,请在从1到某个整数范围中打印出所有的完数来.所谓“完数”是指一个数恰好等于它的所有不同因子之和.例如,6是完数,因为6=1+2+3.而24不是完数,因为24≠1+2+ ...