== 和 != 已经变成不好的做法了吗?
Has == and != become bad practise?
几个月以来,我的 IDE (WebStorm) 突出显示 JavaScript 常规相等运算符并发出以下警告:
Comparioson a == b may cause unexpected type coercion.
This inspection reports usages of JavaScript quality operators which may cause unexpected
type coercions. It is considered a good practice to use the type-safe equality operators
=== and !== instead of their regular counterparts == and !=.
我知道这两个运算符的不同行为,并且我倾向于使用它们,因为它们的行为不同,例如。对于惰性类型转换:
if(parseInt(val) == val) // val can be safely converted to int
但是,IDE 正在向 所有 次出现的 ==
添加警告,因此上面的内容 不再正确。我可以将所有这些部分转换成更难读的东西:
if(parseInt(val).toString() === val) // be happy webstorm
真的是这样吗?还是我应该 ignore/disable 这些警告?
是的,这是近二十年来的最佳做法。
警告非常明确(甚至解释了 为什么 会出现警告),您会在 JavaScript 书籍以及广泛的其他书籍中找到相同的建议网络。
所以,我不明白为什么你会考虑忽略甚至禁用它。
您可以在此处找到有关何时选择 ==
以及何时选择 ===
的更多信息:
- When is it OK to use == in JavaScript?
我认为任何形式的类型强制,如果对于运行时可能未知的类型(如任何动态语言)来说是意外的,都是不好的做法。
例如,这两个都是真的:
"0" == false
"0"
虽然这是错误的:
false
几个月以来,我的 IDE (WebStorm) 突出显示 JavaScript 常规相等运算符并发出以下警告:
Comparioson a == b may cause unexpected type coercion.
This inspection reports usages of JavaScript quality operators which may cause unexpected
type coercions. It is considered a good practice to use the type-safe equality operators
=== and !== instead of their regular counterparts == and !=.
我知道这两个运算符的不同行为,并且我倾向于使用它们,因为它们的行为不同,例如。对于惰性类型转换:
if(parseInt(val) == val) // val can be safely converted to int
但是,IDE 正在向 所有 次出现的 ==
添加警告,因此上面的内容 不再正确。我可以将所有这些部分转换成更难读的东西:
if(parseInt(val).toString() === val) // be happy webstorm
真的是这样吗?还是我应该 ignore/disable 这些警告?
是的,这是近二十年来的最佳做法。
警告非常明确(甚至解释了 为什么 会出现警告),您会在 JavaScript 书籍以及广泛的其他书籍中找到相同的建议网络。
所以,我不明白为什么你会考虑忽略甚至禁用它。
您可以在此处找到有关何时选择 ==
以及何时选择 ===
的更多信息:
- When is it OK to use == in JavaScript?
我认为任何形式的类型强制,如果对于运行时可能未知的类型(如任何动态语言)来说是意外的,都是不好的做法。
例如,这两个都是真的:
"0" == false
"0"
虽然这是错误的:
false