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


Posted in Javascript onMarch 08, 2007

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

    其实标题里面我已经列出了JavaScript中所有的"空值"和"假值",除了boolean值本身就是true和false这两种情况外,其它数据类型的"空值"主要是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"给弄得迷糊了好一阵子。
Javascript 相关文章推荐
Dom在ajax技术中的作用说明
Oct 25 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
Mar 19 Javascript
浅谈jQuery中replace()方法
May 13 Javascript
jQuery添加和删除指定标签的方法
Dec 16 Javascript
angularjs 表单密码验证自定义指令实现代码
Oct 27 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
Feb 09 Javascript
jQuery实现验证用户登录
Dec 10 jQuery
原生js拖拽实现图形伸缩效果
Feb 10 Javascript
vue-autoui自匹配webapi的UI控件的实现
Mar 20 Javascript
Vue elementui字体图标显示问题解决方案
Aug 18 Javascript
小程序点餐界面添加购物车左右摆动动画
Sep 23 Javascript
记录一次websocket封装的过程
Nov 23 Javascript
在JavaScript中使用inline函数的问题
Mar 08 #Javascript
JS类中定义原型方法的两种实现的区别
Mar 08 #Javascript
JavaScript语言中的Literal Syntax特性分析
Mar 08 #Javascript
从JavaScript的函数重名看其初始化方式
Mar 08 #Javascript
翻译整理的jQuery使用查询手册
Mar 07 #Javascript
用window.location.href实现刷新另个框架页面
Mar 07 #Javascript
javascript中的location用法简单介绍
Mar 07 #Javascript
You might like
DC动漫人物排行
2020/03/03 欧美动漫
MySQL 日期时间函数常用总结
2012/06/12 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
php url路由入门实例
2014/04/23 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
PHP使用SOAP扩展实现WebService的方法
2016/04/01 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
JavaScript cookie的设置获取删除详解
2014/02/11 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
ES6 十大特性简介
2020/12/09 Javascript
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
UNIX特点都有哪些
2016/04/05 面试题
大学生军训自我评价分享
2013/11/09 职场文书
大专应届生个人的自我评价
2013/11/21 职场文书
暑期学习心得体会
2014/09/02 职场文书
学生个人评语大全
2015/01/04 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
2016春节放假通知范文
2015/08/18 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
一篇文章弄懂Python中的内建函数
2021/08/07 Python
Python  lambda匿名函数和三元运算符
2022/04/19 Python
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS