Javascript学习笔记之相等符号与严格相等符号


Posted in Javascript onNovember 23, 2014

Javascript 有两种方法来判断两种值是否相等。

相等符号

相等符号由两个等号组成: ==
Javascript 是弱类型语言。这就意味着相等符号为了比较两个值将会强制转换类型。

""           ==   "0"           // false

0            ==   ""            // true

0            ==   "0"           // true

false        ==   "false"       // false

false        ==   "0"           // true

false        ==   undefined     // false

false        ==   null          // false

null         ==   undefined     // true

" \t\r\n"    ==   0             // true

上面的代码展示了类型转换的结果,因此我们知道使用相等符号 == 是个不好的编程习惯。由于 Javascript 中复杂的类型转换机制,将会使得由此产生的错误变得难以追踪。
此外,类型的强制转换会对性能也造成一定的影响,例如,当一个字符串与数字进行比较时,会被强制转换为数字。

严格相等符号

严格相等符号由三个等号组成: ===
它跟相等符号的操作相似,但是严格相等符号不会做强制类型转换的操作。

""           ===   "0"           // false

0            ===   ""            // false

0            ===   "0"           // false

false        ===   "false"       // false

false        ===   "0"           // false

false        ===   undefined     // false

false        ===   null          // false

null         ===   undefined     // false

" \t\r\n"    ===   0             // false

上面的代码使得代码更加清晰,如果两个值的类型不同则直接返回 false,这也会使得性能得到提升。

比较对象

尽管 == 和 === 被称为相等符号,但是当比较的两个值中有一个类型是对象时,表现将大不相同。

{} === {};                   // false

new String('foo') === 'foo'; // false

new Number(10) === 10;       // false

var foo = {};

foo === foo;                 // true

在这儿,不再仅仅是比较两个值是否相等,它将判断两个值是否引用同一个对象实例,这个行为比较像 C 中的指针。

总结

这里强烈建议只使用严格相等符号 ===。如果我们需要做类型转换,可以在比较前先做显式的类型转换,而不是靠 Javascript 本身复杂的强制转换方法。

Javascript 相关文章推荐
非常不错的一个javascript 类
Nov 07 Javascript
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
Aug 05 Javascript
判断脚本加载是否完成的方法
May 26 Javascript
JS 获取select(多选下拉)中所选值的示例代码
Aug 02 Javascript
javascript同页面多次调用弹出层具体实例代码
Aug 16 Javascript
js操作数据库实现注册和登陆的简单实例
May 26 Javascript
原生js简单实现放大镜特效
May 16 Javascript
underscore之function_动力节点Java学院整理
Jul 11 Javascript
利用纯JS实现像素逐渐显示的方法示例
Aug 14 Javascript
Nuxt.js踩坑总结分享
Jan 18 Javascript
JS与SQL方式随机生成高强度密码示例
Dec 29 Javascript
原生JavaScript写出Tabs标签页的实例代码
Jul 20 Javascript
Javascript学习笔记之数组的构造函数
Nov 23 #Javascript
Javascript学习笔记之数组的遍历和 length 属性
Nov 23 #Javascript
Javascript 赋值机制详解
Nov 23 #Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
Nov 23 #Javascript
Javascript学习笔记之函数篇(五) : 构造函数
Nov 23 #Javascript
Javascript学习笔记之函数篇(四):arguments 对象
Nov 23 #Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
Nov 23 #Javascript
You might like
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
Ajax使用原生态JS验证用户名是否存在
2020/05/26 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
Django实现自定义404,500页面教程
2017/03/26 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
护士个人简历自荐信
2013/10/18 职场文书
幼儿园庆六一活动方案
2014/03/06 职场文书
保护水资源的标语
2014/06/17 职场文书
人事局接收函
2015/01/31 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers