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 相关文章推荐
SUN的《AJAX与J2EE》全文译了
Feb 23 Javascript
符合标准的js表单提交的代码
Sep 13 Javascript
Javascript 原型和继承(Prototypes and Inheritance)
Apr 01 Javascript
jquery ajax修改全局变量示例代码
Nov 08 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
Mar 04 Javascript
JavaScript 性能优化小结
Oct 12 Javascript
bootstrap输入框组代码分享
Jun 07 Javascript
原生js实现验证码功能
Mar 16 Javascript
jQuery图片查看插件Magnify开发详解
Dec 25 jQuery
JS浮点数运算结果不精确的Bug解决
Aug 01 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
Sep 18 Javascript
vue中实现弹出层动画效果的示例代码
Sep 25 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
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
php 网上商城促销设计实例代码
2012/02/17 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
做网页的一些技巧
2007/02/01 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
2016/05/09 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
vue2 前端搜索实现示例
2018/02/26 Javascript
jQuery属性选择器用法实例分析
2019/06/28 jQuery
VUE实现移动端列表筛选功能
2019/08/23 Javascript
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
pytyon 带有重复的全排列
2013/08/13 Python
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
Python中数字以及算数运算符的相关使用
2015/10/12 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
Python 修改列表中的元素方法
2018/06/26 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
瑞士最大的图书贸易公司:Orell Füssli
2019/12/28 全球购物
《蓝色的树叶》教学反思
2014/02/24 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
应急管理培训方案
2014/06/12 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
自我推荐信格式模板
2015/03/24 职场文书