null、undefined、false、0相等性比较
之前在看《JavaScript权威指南》的时候看到三个相等性比较的式子:
null == undefined ;// ==>true
undefined == false;// ==>false
null ==false;// ==>false
对于第一个等式我默认是相等的了,就没有在意,但第二和第三个等式我觉得很奇怪,因为之前有看到过一句“下面这些值会被转换成false: undefined、null、0、-0、
' ' 、NaN”,那么为什么后两个等式会不成立呢?当时看书的时候我也没太在意,只是记下来了,但今天又遇到这个问题,我觉得有必要搞清楚。于是,抱着这个疑问我去百度了一下,看了一下,没有直接关于这个问题的讲解,不过也有一些类似的,主要说的是null是对象,但我记得等号是可以进行类型转换的,转换后不是应该相等吗?而且我还增加了一个疑问,我在网上看到另一个式子:
null ==0;// ==>false
但我记得null转化为数字不就是0吗,怎么等式也不成立。我想还是再从定义入手吧,于是重新查看了《JavaScript权威指南》中关于等号进行类型转换的内容,书中是这样说的:
“如果两个操作数的类型相同,则和上文所述的严格相等的比较规则一样。如果严格相等,那么比较结果为相等。如果他们不严格相等,则比较结果为不相等。
如果两个操作数类型不同,“==”相等操作符也可能会认为他们相等。检测相等将会遵守如下规则和类型转换:
—如果一个值是null,另外一个是undefined,则他们相等。
—如果一个值是数字,另一个是字符串,先将字符串转换为数字,然后使用转换后的值进行比较。
—如果其中一个值是true,则将其转换为1再进行比较。如果其中一个值是false,则将其转换为0再进行比较。
—如果一个值是对象,另一个值是数字或字符串,则使用3.8.3节所提到的转换规则将对象转换为原始值,然后再进行比较。对象通过toString()方法或者valueOf()方法转换为原始值。JavaScript语言核心的内置类首先尝试使用valueOf(),再尝试使用toString(),除了日期类,日期类只使用toString()转换。那些不是JavaScript语言核心中的对象则通过各自的实现中定义的方法转换为原始值。
—其他不同类型之间的比较均不相等。”
仔细读了几遍这几条规定后,我明白了为什么第二和第三个等式不成立,因为false会首先转换为0,而null和undefined都不带有任何方法,无法进行类型转换,所以不成立了,这也是为什么null ==0;// ==>false。后来我查看了一下《JavaScript高级程序设计》,看到里面有这么一句“要比较相等性之前,不能将null和undefined转换成其他任何值。”说得比较明白了。
这样我之前的疑问算是解决了,但还有个问题,那这句话“下面这些值会被转换成false: undefined、null、0、-0、' ' 、NaN”不是错了吗,null什么情况下会转换成false呢?查看了一下以前的笔记,发现做显式类型转换的时候有几个函数如Number()、Boolean(),而隐式转换也等价于调用这些函数,null、undefined虽然没有方法,但它们依然可以用函数转换类型。
总结一下,因为等号比较的时候null和undefined不能转换类型,因此不等于0和false。通过这次解疑,我还注意到之前看过,但没注意的内容,比如,布尔值比较时会先转换为数字。我感觉看过和记得都不能说明理解了,要经过实践后,感觉没有疑问了,真的觉得该是这样,而不是因为书上这么说,那个时候才算是理解了,也就是说实践和思考很重要。
null、undefined、false、0相等性比较的更多相关文章
- 0,null,undefined,[],{},'',false之间的关系
0与一些虚值的比较: 0与false 0==false true 0与'': =='' true 0与[]: ==[] true 0与NaN: 0==NaN false 0与undefined 0== ...
- null,undefined.'',false关系
null == undefined //truefalse =='' //true boolean类型跟其它类型==时,会转换成Number类型 Number类型跟String类型==时,string ...
- null, undefined,"",0,false是什么关系?
null本质上和0,"",false是一类东西,它们都表示一种数据类型的非值.正如0表示数字类型的非值,""表示字符类型的非值一样,null表示完全空的对象,即 ...
- 你所不知道的 JS: null , undefined, NaN, true==1=="1",false==0=="",null== undefined
1 1 1 === 全相等(全部相等) == 值相等(部分相等) demo: var x=0; undefined var y=false; undefined if(x===y){ console ...
- 【转】Javascript 中的false,零值,null,undefined和空字符串对象
js 开发中经常会碰到判断是否为空的情况,关于 null 和 undefined 的区别了解的不是很好,刚好看见这篇文章,转过来学习一下,以下是转载正文: 在Javascript中,我们经常会接触到题 ...
- Javascript 中的false,零值,null,undefined和空字符串对象
在Javascript中,我们经常会接触到题目中提到的这5个比较特别的对象--false.0.空字符串.null和undefined.这几个对象很容易用错,因此在使用时必须得小心. 类型检测 我们下来 ...
- Js 中的false,零值,null,undefined和空字符串对象
转自 http://www.imkevinyang.com/2009/07/javascript-中的false零值nullundefined和空字符串对象.html 在Javascript中,我们 ...
- Javascript中的undefined、null、""、0值和false的区别总结
在程序语言中定义的各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBN ...
- js中 null, undefined, 0,空字符串,false,不全等比较
null == undefined // true null == '' // false null == 0 // false null == false // false undefined = ...
随机推荐
- SQL疑难问题
最近,遇到并解决一个SQL上的疑难问题.考勤系统,记录着员工进出公司的刷卡记录.而员工刷卡并不规范,存在刷多次的情况.例如:出去时连续刷多次,进来时也连续刷多次.筛选有效刷卡记录数据的规则:对于出去时 ...
- SQL查询关于相对路径、矢代、绝对路径、递归、计算列的速度对比跟优化-SOD群记录
1秒查原本递归的查询. 适用于:上下级.多层查询 -- Get childs by parent id WITH Tree AS ( SELECT Id,ParentId FROM dbo.Node ...
- 黑马程序员——C语言基础 char字符 数组
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)char类型 1)存储细节 ASCII单字节表(双字节GBK\GB2 ...
- JavaScript—赋值表达式
赋值表达式的运算顺序是从右到左的,因此,可以通过以下方法对多个变量赋值 1 i=j=k=0;//也就是把三个变量初始化为0 赋值表达式中的递增和递减 n++和++n的区别: 简单来说,根据 ...
- Nginx+Tomcat构建动、静分离WEB架构
一.简介 二.环境介绍 三.后端服务器安装配置 四.安装论坛 五.安装配置前端Nginx服务器 六.验证服务 一.Tomcat简介 Tomcat是Apache 软件基金会(Apache Softwar ...
- PCA and kmeans MATLAB实现
MATLAB基础知识 l Imread: 读取图片信息: l axis:轴缩放:axis([xmin xmax ymin ymax zmin zmax cmin cmax]) 设置 x.y 和 ...
- shape的简单用法
shap节点-----------------------------------定义shape的值,必须是下面的之一:"rectangle" 矩阵,这也是默认的shape&quo ...
- commonjs AMD,CMD
CommonJS CommonJs 是服务器端模块的规范,Node.js采用了这个规范. 根据CommonJS规范,一个单独的文件就是一个模块.加载模块使用require方法,该方法读取一个文件并执行 ...
- 服务器sh脚本自动登录(mac)
一不小心自己也有三台虚拟机了,每次都ssh -username@ip 然后在输入密码着实蛋疼,第一反应时脚本登录,但是作为脚本是逐行执行命令,是无法做到等待一个密码提示出现在输入密码的.查到mac下可 ...
- CSS3 Background-size
详情见链接 http://www.w3cplus.com/content/css3-background-size/ 例子:http://www.topcss.org/demo/background- ...