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 相关文章推荐
JS图片无缝滚动(简单利于使用)
Jun 17 Javascript
javascript中typeof操作符和constucor属性检测
Feb 26 Javascript
javascript日期比较方法实例分析
Jun 17 Javascript
BootStrap入门教程(一)之可视化布局
Sep 19 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
Feb 13 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
Jan 27 Javascript
JavaScript实现二维坐标点排序效果
Jul 18 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
Jul 19 jQuery
vue 的keep-alive缓存功能的实现
Mar 22 Javascript
解决vue动态为数据添加新属性遇到的问题
Sep 18 Javascript
JavaScript实现网页tab栏效果制作
Nov 20 Javascript
JavaScript实现滚动加载更多
Dec 27 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 COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
PHPThumb图片处理实例
2014/05/03 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
flexigrid 参数说明
2010/11/23 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
浅谈node的事件机制
2017/10/09 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
Python Cookie 读取和保存方法
2018/12/28 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
python 字典的打印实现
2019/09/26 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
办公设备采购方案
2014/03/16 职场文书
安全横幅标语
2014/06/09 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
法人身份证明书
2014/10/08 职场文书
医学生自荐信范文
2015/03/05 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
小学教学工作总结2015
2015/05/13 职场文书
刮痧观后感
2015/06/05 职场文书