区分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 相关文章推荐
javascript 树控件 比较好用
Jun 11 Javascript
StringTemplate遇见jQuery冲突的解决方法
Sep 22 Javascript
Javascript绝句欣赏 一些经典的js代码
Feb 22 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
Mar 29 Javascript
javascript学习笔记(八)正则表达式
Oct 08 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
Sep 17 Javascript
jQuery动态增减行的实例代码解析(推荐)
Dec 05 Javascript
jQuery操作json常用方法示例
Jan 04 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
Feb 14 Javascript
Vue-cli中为单独页面设置背景色的实现方法
Feb 11 Javascript
jQuery实现标签子元素的添加和赋值方法
Feb 24 jQuery
JS实现数组删除指定元素功能示例
Jun 05 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 allow_url_include的应用和解释
2010/04/22 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
Java中final关键字详解
2015/08/10 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
php强制下载文件函数
2016/08/24 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
js控制input输入字符解析
2013/12/27 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
python的常见命令注入威胁
2013/02/18 Python
python列表操作使用示例分享
2014/02/21 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
python logging模块的使用总结
2019/07/09 Python
opencv实现简单人脸识别
2021/02/19 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
工厂保洁员岗位职责
2013/12/04 职场文书
小学六年级学生评语
2014/04/22 职场文书
保研推荐信
2014/05/09 职场文书
安全责任书范文
2014/08/25 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
个人剖析材料范文
2014/09/30 职场文书