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 浮点数运算 精度问题
Oct 06 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
Apr 02 Javascript
jQuery中end()方法用法实例
Jan 08 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
May 06 Javascript
JavaScript文档碎片操作实例分析
Dec 12 Javascript
基于Vue.js的表格分页组件
May 22 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
Nov 02 Javascript
jQuery 全选 全不选 事件绑定的实现代码
Jan 23 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
Jun 08 Javascript
JavaScript递归算法生成树形菜单
Aug 15 Javascript
vue 微信授权登录解决方案
Apr 10 Javascript
Vue列表循环从指定下标开始的多种解决方案
Apr 08 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 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
php实现Mysql简易操作类
2015/10/11 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
jQuery学习笔记之jQuery的DOM操作
2010/12/22 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
jQuery的实例及必知重要的jQuery选择器详解
2016/05/20 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
Python中if __name__ == "__main__"详细解释
2014/10/21 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
python dlib人脸识别代码实例
2019/04/04 Python
Pandas之DataFrame对象的列和索引之间的转化
2019/06/25 Python
python中selenium操作下拉滚动条的几种方法汇总
2019/07/14 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
使用Python构造hive insert语句说明
2020/06/06 Python
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
KEEN美国官网:美国人气户外休闲鞋品牌
2021/03/09 全球购物
某公司Java工程师面试题笔试题
2016/03/27 面试题
军神教学反思
2014/02/04 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python