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 相关文章推荐
htm调用JS代码
Mar 15 Javascript
用JavaScript实现UrlEncode和UrlDecode的脚本代码
Jul 23 Javascript
有趣的JavaScript数组长度问题代码说明
Jan 20 Javascript
js中符号转意问题示例探讨
Aug 19 Javascript
详解JavaScript中的Unescape()和String() 函数
Nov 09 Javascript
Perl Substr()函数及函数的应用
Dec 16 Javascript
在JavaScript中使用JSON数据
Feb 15 Javascript
浅谈JQ中mouseover和mouseenter的区别
Sep 13 Javascript
浅析JavaScript中作用域和作用域链
Dec 06 Javascript
Webpack实现按需打包Lodash的几种方法详解
May 08 Javascript
vue移动端实现下拉刷新
Apr 22 Javascript
ES6的Fetch异步请求的实现方法
Dec 07 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获取是星期几的的一些常用姿势
2019/12/15 PHP
CheckBox 如何实现全选?
2006/06/23 Javascript
javascript优先加载笔记代码
2008/09/30 Javascript
利用javascript解决图片缩放及其优化的代码
2012/05/23 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
jquery控制显示服务器生成的图片流
2015/08/04 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
微信小程序自定义组件之可清除的input组件
2018/07/17 Javascript
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
Python可跨平台实现获取按键的方法
2015/03/05 Python
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
python设置环境变量的作用和实例
2019/07/09 Python
对Python3中列表乘以某一个数的示例详解
2019/07/20 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
英语系本科生个人求职信
2013/09/21 职场文书
工程业务员工作职责
2013/12/07 职场文书
幼儿园新年寄语
2014/04/03 职场文书
教师暑期培训感言
2014/08/15 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
2015年试用期工作总结
2014/12/12 职场文书
师德师风学习材料
2014/12/19 职场文书
党校毕业个人总结
2015/02/28 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
学校工会工作总结2015
2015/05/19 职场文书
2019毕业典礼主持词!
2019/07/05 职场文书
分享几个简单MySQL优化小妙招
2022/03/31 MySQL
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android