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 相关文章推荐
jQuery dialog 异步调用ashx,webservice数据的代码
Aug 03 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
Jan 18 Javascript
js用拖动滑块来控制图片大小的方法
Feb 27 Javascript
JQuery实现动态适时改变字体颜色的方法
Mar 10 Javascript
JavaScript让Textarea支持tab按键的方法
Jun 26 Javascript
浅谈javascript中return语句
Jul 15 Javascript
浅谈JavaScript中的分支结构
Jul 01 Javascript
BootStrap tooltip提示框使用小结
Oct 26 Javascript
详解利用 Express 托管静态文件的方法
Sep 18 Javascript
layui框架中layer父子页面交互的方法分析
Nov 15 Javascript
在angular 6中使用 less 的实例代码
May 13 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
Nov 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
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
MySQL数据源表结构图示
2008/06/05 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
PHP $O00OO0=urldecode & eval 解密,记一次商业源码的去后门
2020/09/13 PHP
学习ExtJS border布局
2009/10/08 Javascript
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
JS与jQuery遍历Table所有单元格内容的方法
2015/12/07 Javascript
理解javascript对象继承
2016/04/17 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
2016/05/29 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
Vue组件间通信 Vuex的用法解析
2019/08/05 Javascript
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
Flask-Mail用法实例分析
2018/07/21 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
俄罗斯香水和化妆品购物网站:Л’Этуаль
2018/05/10 全球购物
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
delegate与普通函数的区别
2014/01/22 面试题
艺术系大学生毕业个人自我评价
2013/09/19 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
会计求职自荐信
2015/03/26 职场文书
运动会200米广播稿
2015/08/19 职场文书
Win10系统下配置Java环境变量
2021/06/13 Java/Android
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
vue判断按钮是否可以点击
2022/04/09 Vue.js