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入门基础 document.write输出
Feb 22 Javascript
简单的两种Extjs formpanel加载数据的方式
Nov 09 Javascript
js 立即调用的函数表达式如何写
Jan 12 Javascript
小巧强大的jquery layer弹窗弹层插件
Dec 06 Javascript
JavaScript是如何实现继承的(六种方式)
Mar 31 Javascript
JavaScript必知必会(六) delete in instanceof
Jun 08 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
Jan 15 Javascript
jQuery阻止移动端遮罩层后页面滚动
Mar 15 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
Jul 04 Javascript
解决vue-cli3 使用子目录部署问题
Jul 19 Javascript
微信小程序按钮点击跳转页面详解
May 06 Javascript
微信小程序 组件的外部样式externalClasses使用详解
Sep 06 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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
一贴学会PHP 新手入门教程
2009/08/03 PHP
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
Cpy和Python的效率对比
2015/03/20 Python
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
python实现简单图片物体标注工具
2019/03/18 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
python 实现线程之间的通信示例
2020/02/14 Python
python中有帮助函数吗
2020/06/19 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
10个最常见的HTML5面试题 附答案
2016/06/06 HTML / CSS
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
会计出纳员的自我评价
2014/01/15 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题