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 基础篇(一)
Mar 30 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
Jun 21 Javascript
JavaScript之数组(Array)详解
Apr 01 Javascript
node.js cookie-parser之parser.js
Jun 06 Javascript
ES6新特性六:promise对象实例详解
Apr 21 Javascript
Vue2.0设置全局样式(less/sass和css)
Nov 18 Javascript
js解决软键盘遮挡输入框的问题分享
Dec 19 Javascript
ajax请求+vue.js渲染+页面加载的示例
Feb 11 Javascript
判断iOS、Android以及PC端的示例代码
Nov 15 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
Nov 01 Javascript
javascript自定义加载loading效果
Sep 15 Javascript
vue $router和$route的区别详解
Dec 02 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
php smarty的预保留变量总结
2008/12/04 PHP
php中chdir()函数用法实例
2014/11/13 PHP
PHP单链表的实现代码
2016/07/05 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
一个简单的js动画效果代码
2010/07/20 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
jquery教程ajax请求json数据示例
2014/01/13 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
js实现拖动缓动效果
2020/01/13 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
详解node.js 事件循环
2020/07/22 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
Python3.7实现中控考勤机自动连接
2018/08/28 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
HTTP状态码详解
2021/03/18 杂记
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
浅谈html5与APP混合开发遇到的问题总结
2018/03/20 HTML / CSS
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
美术专业个人自我评价
2014/01/18 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
2014年网管工作总结
2014/12/11 职场文书
工商局个人工作总结
2015/03/03 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书
Linux安装apache服务器的配置过程
2021/11/27 Servers
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python