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 相关文章推荐
在Z-Blog中运行代码[html][/html](纯JS版)
Mar 25 Javascript
JQuery 学习笔记 element属性控制
Jul 23 Javascript
传智播客学习之JavaScript基础篇
Nov 13 Javascript
一个原生的用户等级的进度条
Jul 03 Javascript
使用jquery写个更改表格行顺序的小功能
Apr 29 Javascript
JS 作用域与作用域链详解
Apr 07 Javascript
使用jQuery判断浏览器滚动条位置的方法
May 30 Javascript
javascript cookie基础应用之记录用户名的方法
Sep 20 Javascript
JS实现的几个常用算法
Nov 12 Javascript
如何使用angularJs
May 08 Javascript
原生JS实现自定义滚动条效果
Oct 27 Javascript
微信小程序工具函数封装
Oct 28 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 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
IE6,IE7下js动态加载图片不显示错误
2010/07/17 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
js中字符型和数值型数字的互相转化方法(必看)
2017/04/25 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
vue--vuex详解
2019/04/15 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
关于Vue中axios的封装实例详解
2019/10/20 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
vue实现选中效果
2020/10/07 Javascript
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
python模拟表单提交登录图书馆
2018/04/27 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
Python根据成绩分析系统浅析
2019/02/11 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
诗普兰迪官方网站:Splendid
2018/09/18 全球购物
产品销售计划书
2014/05/04 职场文书
个性车贴标语
2014/06/24 职场文书
建筑安全责任书范本
2014/07/24 职场文书
淘宝好评语句大全
2014/12/31 职场文书
爱晚亭导游词
2015/02/09 职场文书