0

我正在检查基于 JSHint 工具的 JavaScript 代码。这个工具检测到很多关于使用“===”而不是“==”的错误。我的问题是遵循 JSHint 所说的内容是否安全?在将 == 替换为 === 之前,我是否需要进一步检查(关于它们的类型和值)?谢谢!

4

4 回答 4

2

是的,你应该。

如果您在没有考虑类型强制的情况下编写代码,则可能会发生一些您没想到的错误,例如

'' == '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
于 2013-04-09T11:50:21.427 回答
1

我的问题是遵循 JSHint 所说的内容是否安全?

不,您可能取决于给出的类型强制==

在将 == 替换为 === 之前,我是否需要进一步检查(关于它们的类型和值)?

是的。

于 2013-04-09T11:48:41.590 回答
1
""==0 // true

""===0 // false

所以你不能盲目地改变你的所有代码并期望它像以前一样工作。这就是为什么你的代码应该有单元测试。所以你知道什么不再起作用了。

于 2013-04-09T11:49:13.807 回答
1

建议替换==为,===因为它使代码更易于预测且不易出错。Douglas Crockford 建议永远不要使用==. 然而,这只是他的意见。

实际上,如果你在代码中有这样的检查并且知道你在做什么(类型会被强制),甚至可能依赖于这种行为,那么使用这些比较是绝对可以的。您可以取消选中“关于不安全比较的警告”。

如果您想替换这些比较,您肯定必须检查您的代码是否继续按预期工作。

于 2013-04-09T11:54:17.367 回答