栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript比较中应使用哪个等于运算符(== vs ===)?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript比较中应使用哪个等于运算符(== vs ===)?

身份(

===
)运算符的行为与相等(
==
)运算符相同,但不进行任何类型转换,并且类型必须相同才能被视为相等。

进行任何必要的类型转换后,

==
运算符将比较是否相等。该运营商将不会进行转换,因此,如果两个值是不一样的类型将简单地返回。两者都同样快。
======false

引用Douglas Crockford出色的Javascript:The Good Parts,

Javascript
有两组相等的运算符:
===
!==
,以及它们的邪恶孪生子==和!=。优秀的产品以你期望的方式工作。如果两个操作数具有相同的类型并具有相同的值,则
===
产生true和!
==
产生
false
。当操作数是相同类型时,邪恶双胞胎会做正确的事情,但是如果操作数是不同类型,则它们会试图强制值。他们所遵循的规则是复杂而难忘的。这些是一些有趣的情况:

'' == '0'// false0 == ''  // true0 == '0' // truefalse == 'false'    // falsefalse == '0'        // truefalse == undefined  // falsefalse == null       // falsenull == undefined   // true' trn ' == 0     // true

传递性的缺乏令人震惊。我的建议是不要使用邪恶的双胞胎。相反,请始终使用

===
!==
。刚才显示的所有比较都是false由
===
操作员进行的。

更新:
@Casebash在评论中和@Phillipe Laybaert 关于引用类型的答案中提出了一个很好的观点。对于引用类型

==
===
彼此之间要保持一致(特殊情况除外)。

var a = [1,2,3];var b = [1,2,3];var c = { x: 1, y: 2 };var d = { x: 1, y: 2 };var e = "text";var f = "te" + "xt";a == b // falsea === b// falsec == d // falsec === d// falsee == f // truee === f// true

特殊情况是,当你将一个文字与一个对象进行比较时,该对象因其

toString
valueOf
方法而得出的文字相同。例如,考虑将字符串文字与S
tring
构造函数创建的字符串对象进行比较。

"abc" == new String("abc")    // true"abc" === new String("abc")   // false

在这里,==操作员正在检查两个对象的值并返回true,但是===看到它们不是同一类型并返回false。哪一个是正确的?这确实取决于你要比较的内容。我的建议是完全绕过该问题,只是不要使用String构造函数来创建字符串对象。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/376592.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号