区分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 相关文章推荐
JS window.opener返回父页面的应用
Oct 24 Javascript
toString()一个会自动调用的方法
Feb 08 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
Jul 18 Javascript
js中的事件捕捉模型与冒泡模型实例分析
Jan 10 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
Jan 25 Javascript
js实现浏览器倒计时跳转页面效果
Aug 12 Javascript
JavaScript表单验证完美代码
Mar 02 Javascript
js实现加载页面就自动触发超链接的示例
Aug 31 Javascript
js仿微信抢红包功能
Sep 25 Javascript
Es6 Generator函数详细解析
Feb 24 Javascript
vue 循环加载数据并获取第一条记录的方法
Sep 26 Javascript
用 js 写一个 js 解释器过程详解
Aug 02 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
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
thinkphp连贯操作实例分析
2014/11/22 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
学习ExtJS table布局
2009/10/08 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
python 字典(dict)按键和值排序
2016/06/28 Python
python简单验证码识别的实现方法
2019/05/10 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
Foreo国际站:Foreo International
2018/10/29 全球购物
日语专业毕业生求职信
2013/12/04 职场文书
规划编制实施方案
2014/03/15 职场文书
新教师岗前培训方案
2014/06/05 职场文书
培训科主任岗位职责
2014/08/08 职场文书
咖啡店创业计划书
2014/08/15 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
财务工作失误检讨书
2015/02/19 职场文书
休假证明书
2015/06/24 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
Python机器学习之逻辑回归
2021/05/11 Python
Python基础学习之奇异的GUI对话框
2021/05/27 Python
基于Python实现一个春节倒计时脚本
2022/01/22 Python
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL