我是JS的新手,我知道==
双比较表示相等,===
三重比较表示相等和类型。我的老师说我应该用三倍。但是,当其中一个元素是字符串时,如果我使用double equal,则不会看到任何向下的效果。
'' == 0 // true
'10' == 10 // true
'dog' == 'cat' // false
因此,当某些元素是字符串(避免此'false' == false
)时,我使用的是“始终为null
双相等”,在检测null
或undefined
时使用“三重”。
我的做法有什么不好的地方吗?
我检查了前面的答案:Which equals operator (== vs ===) should be used in JavaScript comparisons?
发布于 2020-05-28 10:13:25
以我的个人工作经验为基础,我从未使用过抽象相等操作符(==)而不是严格相等操作符(===)。
因为==运算符可能有一些不可预测的行为,例如
'0' == false // true
而
'0' === false // false
第二种情况通常是您希望代码所做的事情。
而且,==运算符的性能比===运算符要高得多。
您可以在ecmaScript文档中阅读更多有关这方面的内容:
相等(==)运算符:https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.1
抽象等式比较算法:https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
严格等于(===)运算符:https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.4
严格相等比较算法:https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6 (这两种比较算法可能会向您说明为什么严格相等在性能上更好)
发布于 2020-05-28 09:45:57
如果读取链接的答案,还会读取这段涉及字符串的代码:
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
这些都是字符串,但行为仍然不是你所期望的那样。的确,正如你的老师说的那样,使用===
可以让你的生活更轻松:)
发布于 2020-05-28 09:47:31
如果使用' 10‘== 10,那么js解释器必须执行类型转换。这需要一点表演。
如果您正在使用像sonarqube这样的代码质量工具,您将得到一些“提示”来修复它。
https://stackoverflow.com/questions/62071080
复制相似问题