`

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

 
阅读更多

在程序语言中定义的各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBNull,boolean类型的假值false等等。在JavaScript中也有很多种的"空值"和"假值",那么它们都有什么共同点和不同点呢?

其实标题里面我已经列出了JavaScript中所有的"空值"和"假值",除了boolean值本身就是truefalse这两种情况外,其它数据类型的"空值"主要是undefined和defined这两大类。这些空值的类型分别是:

typeof(undefined) == 'undefined'
typeof(null) == 'object'
typeof("") == 'string'
typeof(0) == 'number'
typeof(false) == 'boolean'


这五个值的共同点是,在if语句中做判断,都会执行false分支。当然从广义上来看,是说明这些数值都是其对应数据类型上的无效值或空值。还有这五个值作!运算,结果全为:true

这几个值中也有不同,其中undefined和null比较特殊,虽然null的类型是object,但是null不具有任何对象的特性,就是说我们并不能执行null.toString()、null.constructor等对象实例的默认调用。所以从这个意义上来说,null和undefined有最大的相似性。看看null == undefined的结果(true)也就更加能说明这点。不过相似归相似,还是有区别的,就是和数字运算时,10 + null结果为:10;10 + undefined结果为:NaN。

另外""、0和false虽然在if语句表现为"假值",可它们都是有意义数据,只是被作为了"空值"或"假值",因为:"".toString(),(0).toString()和false.toString()都是合法的可执行表达式。

其实这5个值在上面所说的这些差异里,并不太会给程流程控制带来太大的问题,那么要区分它们什么呢?需要注意区分的是这些值在转换为String时的差异是比较大的,它们到String的转换关系是:

String(undefined) -> "undefined"
String(
null) -> "null"
String(
"") -> ""
String(
0) -> "0"
String(
false) -> "false"


这个转换关系在做字符串累加时需要特别的注意,否这会出些意想不到的问题,今天就遇到一个null被默认转为"null"给弄得迷糊了好一阵子

 

转自博客园http://www.cnblogs.com/birdshome/archive/2005/03/04/111991.html

分享到:
评论

相关推荐

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

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

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

    其实标题里面我已经列出了JavaScript中所有的”空值”和”假值”,除了boolean值本身就是true和false这两种情况外,其它数据类型的”空值”主要是undefined和defined这两大类。这些空值的类型分别是: 代码如下: ...

    详解JavaScript中undefined与null的区别

    有点奇怪的是,JavaScript语言居然有两个表示”无”的...undefined和null在if语句中,都会被自动转为false,相等运算符甚至直接报告两者相等。 代码如下:if (!undefined) console.log(‘undefined is false’);// unde

    JavaScript Undefined,Null类型和NaN值区别

    函数无明确返回值时(函数没有返回值时返回的都是undefined) undefined 并不等同于未定义的值 typeof 并不真正区分是否是未定义 看以下示例代码: var oTemp; alert(typeof oTemp); // outputs ...

    object-is:符合ES6的Object.is填充程序-区分-0和+0,并且可以与NaN进行比较

    符合ES2015的Object.is填充程序-区分-0和+0,并且可以与NaN进行比较。 本质上,Object.is返回与===相同的值-但对于NaN为true,对于-0和+0为false。 该软件包实现了接口。 它可以在ES3支持的环境中工作并符合。 ...

    javascript学习笔记.docx

    共70页,复制两页供参考,如下: 1 JavaScript基本语法 1) 读未声明的变量会产生...但JavaScript默认的函数和构造函数会在每个窗口中拥有独立副本。 16) onload()和onunload()事件分别在网页装载完成后和卸载前执行。

    JavaScript笔记

    |--Boolean(布尔类型)0、-0、null、""、false/undefined或NaN,则该对象设置为false。其余都可以当true 6.数据类型的隐式转换: |--数字 + 字符串:数字转换为字符串 |--数字 + 布尔值:true转换为1,false转换为...

    JavaScript习题(语言结构)

    25. JavaScript中的关系运算符主要有四对,分别是大于和小于_________,等于和不等于_________,大于等于和小于等于__________以及等同于和不等同于____________。 26. null==undefined返回true,null>=undefined返回...

    javascript入门笔记

    Javascript,简称为 JS,是一款能够运行在 JS解释器/引擎 中的脚本语言 JS解释器/引擎 是JS的运行环境: 1、独立安装的JS解释器 - NodeJS 2、嵌入在浏览器中的JS解释器 JS的发展史: 1、1992年 Nombas 开发...

    程序员面试刷题的书哪个好-InterviewGuide:前端工程师面试指南

    undefined类型只有一个值undefined,它是变量未赋值时候的值,在JavaScript中全局对象有一个undefined属性表示undefined,事实上undefined并非JavaScript的关键字,可以给全局的undefined属性赋值来改变它的值。...

    JavaScript面向对象精要(上部)

    在JavaScript中,数据类型分为两类: 原始类型 保存一些简单数据,如true,5等。JavaScript共有5中原始类型: boolean:布尔,值为true或false number:数字,值为任何整型会浮点数值 string:字符串,值为由单引号或...

    图库新版jQuery焦点图 JS代码

    // ad function dy(code) ...document.writeln ('<iframe width="120" height="24" frameborder="0" allowtransparency="true" marginwidth="0" marginheight="0" scrolling="no" border="0" src=...

    浅析为什么a=”abc” 不等于 a=new String(“abc”)

    在js中,区分原始资料类型和包装类型。数字、字符串、布尔、null、undefined 属于原始资料类型,而Number、String、Boolean属于包装类型,通过new Number 创建的是包装类型的派生对象。所以两者是不等的。 直接赋值...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    在XML中,就是要将网页也作为一个对象来操作和控制,我们可以建立自己的对象和模板。与对象进行交流,如何命令对象,就要用到API。API全称Application Programming Interface,它是访问和操作对象的规则。而DOM就是...

Global site tag (gtag.js) - Google Analytics