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 EasyPager 分页函数
May 25 Javascript
IE 当eval遇上function的处理
Aug 09 Javascript
精心挑选的15个jQuery下拉菜单制作教程
Jun 15 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
Sep 04 Javascript
js操作table元素实现表格行列新增、删除技巧总结
Nov 18 Javascript
基于javascript实现checkbox复选框实例代码
Jan 28 Javascript
layui导航栏实现代码
May 19 Javascript
图片懒加载imgLazyLoading.js使用详解
Sep 15 Javascript
微信小程序模板(template)使用详解
Jan 31 Javascript
Vue中使用webpack别名的方法实例详解
Jun 19 Javascript
解决vue项目运行npm run serve报错的问题
Oct 26 Javascript
浅谈vue2的$refs在vue3组合式API中的替代方法
Apr 18 Vue.js
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
第六节--访问属性和方法
2006/11/16 PHP
Smarty Foreach 使用说明
2010/03/23 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
PHP中实现获取IP和地理位置类分享
2015/02/10 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
2011/07/31 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
jQuery简单实现彩色云标签效果示例
2016/08/01 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
Python中装饰器高级用法详解
2017/12/25 Python
技术学校毕业生求职信分享
2013/12/02 职场文书
大学生就业意向书范文
2014/04/01 职场文书
小学节能减排倡议书
2014/05/15 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
杭白菊导游词
2015/02/10 职场文书
2015年征兵工作总结
2015/07/23 职场文书
八年级作文之友谊
2019/12/02 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python