区分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编程起步(第七课)
Feb 27 Javascript
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
Oct 29 Javascript
基于jQuery架构javascript基础体系
Jan 01 Javascript
当jQuery1.7遇上focus方法的问题
Jan 26 Javascript
JavaScript中如何通过arguments对象实现对象的重载
May 12 Javascript
提交按钮的name='submit'引起的js失效问题及原因
Feb 25 Javascript
使用 stylelint检查CSS_StyleLint
Apr 28 Javascript
基于JavaScript实现微信抢红包功能
Jul 20 Javascript
JavaScript实现多态和继承的封装操作示例
Aug 20 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
Jun 20 jQuery
layui自定义ajax左侧三级菜单
Jul 26 Javascript
Vue实现商品飞入购物车效果(电商项目)
Nov 26 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下正则来匹配dede模板标签的代码
2010/08/21 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
php实现分页功能的详细实例方法
2019/09/29 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
Python语言快速上手学习方法
2018/12/14 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
Python接口自动化测试框架运行原理及流程
2020/11/30 Python
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
Prototype是怎么扩展DOM的
2014/10/01 面试题
计算机个人求职信范例
2014/01/24 职场文书
社区八一活动方案
2014/02/03 职场文书
房展策划方案
2014/06/07 职场文书
学校教学管理制度
2015/08/06 职场文书