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 相关文章推荐
jquery随意添加移除html的实现代码
Jun 21 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
Jul 12 Javascript
代码触发js事件(click、change)示例应用
Dec 13 Javascript
IE与FireFox的JavaScript兼容问题解决办法
Dec 31 Javascript
DOM基础教程之使用DOM控制表格
Jan 20 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
Jan 29 Javascript
javascript HTML+CSS实现经典橙色导航菜单
Feb 16 Javascript
如何在Angular.JS中接收并下载PDF
Nov 26 Javascript
基于Bootstrap table组件实现多层表头的实例代码
Sep 07 Javascript
通过 JS 判断页面是否有滚动条的实现方法
Apr 05 Javascript
了解JavaScript中的选择器
May 24 Javascript
Vue项目中使用WebUploader实现文件上传的方法
Jul 21 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字符串截取问题
2006/11/28 PHP
php自定文件保存session的方法
2014/12/10 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
2016/03/16 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
AUC计算方法与Python实现代码
2020/02/28 Python
Python post请求实现代码实例
2020/02/28 Python
python re的findall和finditer的区别详解
2020/11/15 Python
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
刊首寄语大全
2014/04/11 职场文书
给校长的建议书200字
2014/05/16 职场文书
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android