在Javascript中使用===而不是==和typeof的原因是什么?

Eri*_*c P 24 javascript typeof

在许多第三方库和最佳实践博客/推荐等中......通常会看到如下语法:

typeof x === 'object' (instead of typeof x == 'object')
typeof y === 'string' (instead of typeof x == 'string')
typeof z === 'function' (instead of typeof x == 'function')
Run Code Online (Sandbox Code Playgroud)

如果typeof运算符已经返回一个字符串,那么还需要键入什么来检查返回值?如果typeof(typeof(x))总是字符串,无论x实际上是什么,那么==应该足够了并且===不必要.

在什么情况下typeof 不会返回字符串文字?即使有一些边缘情况,为什么附加类型检查用于对象,字符串,函数等...

Ski*_*ick 20

回答主要问题 - 使用typeof时没有危险==.以下是您可能想要使用的原因===.


Crockford的建议是,===在许多情况下使用它会更安全,如果你在某些情况下使用它,最好是保持一致并将它用于一切.

我们的想法是你可以考虑是否使用=====每次检查平等,或者你可以养成总是写作的习惯===.

几乎没有理由使用=====- 如果你正在比较true或者false你想要强制(例如你想要0''要评估false)那么只需使用if(! empty_str)而不是if(empty_str == false).


对于那些不了解类型==语境之外的问题的人,请参阅"好的部分:

'' == '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
Run Code Online (Sandbox Code Playgroud)

  • @Eric我知道,但我所说的是使用`===`的原因是为了与你的其余代码保持一致. (3认同)
  • 不,那不是我问的问题:我在使用typeof运算符时特别要求. (2认同)
  • @Eric我认为这完全是不信任的!类型强制的规则非常奇怪. (2认同)

Mat*_*hen 5

如果typeof运算符已经返回一个字符串,那么还需要键入什么来检查返回值?如果typeof(typeof(x))总是字符串,无论x实际上是什么,那么==应该足够了并且===不必要.

这是主观的.您可以轻松地转过身来,并问:"为什么在不期望隐式转换时会使用==?" 两者在这里工作正常,所以使用你觉得更好的表达你的意图.尽量在项目中保持一致.