为什么我在使用typeof-operator时会进行类型检查(===)

时间:2015-02-02 15:59:31

标签: javascript

在许多代码示例中,我确实看到人们在使用===进行类型检查时使用typeof。 但typeof始终返回string。无论你正在检查哪个变量。那么为什么要使用===进行类型检查?

示例:

if(typeof num === 'number')
    // do something

有没有我不知道的边缘案例?

3 个答案:

答案 0 :(得分:2)

typeof operator始终返回一个字符串,因此行为将完全相同。如果您不需要特别强制,那么使用最严格的运营商是一种很好的做法。

在这种情况下不应该有性能差异,因为typeof保证返回一个字符串,因此不应该进行任何强制。但是,如果有人更改了代码,则使用===将强制新代码也返回一个字符串(或让它们更新条件)。

当您需要比较不同(或可能不同)类型的两个值时,==运算符很有用,但如果您提前知道类型将是相同的,{{ 1}}具有所有好处并强制执行严格的比较。稍后,如果有人想要使代码不那么严格,他们必须明确地这样做。

答案 1 :(得分:-1)

如果在给定的比较中没有可能的类型转换(由于typeof x === "string"总是返回一个字符串而没有typeof),那么=====之间没有功能差异。 if (typeof num === 'number') 。在这种情况下使用的更多是优选风格的问题,因为没有功能差异。

所以,在你的情况下:

==

它与if (typeof num == 'number') 版本之间没有功能差异:

num

无论===具有什么值,都会提供完全相同的结果。您可以使用任一版本,并且您的代码将在所有情况下正确运行。

  

有没有我不知道的边缘案例?

不,这个特定的例子没有边缘情况。


  

那么为什么要使用===进行类型检查?

Javascript编码的一个流行建议是始终使用===,除非您明确要求允许类型转换。这被认为是一种更安全的编码风格,因为您不会意外地获得您没有考虑或计划的类型转换。

所以,如果你遵循这个建议,那么你会想到你的默认编码风格是使用===,除非有理由不使用它(例如你想要一个类型转换)被允许)。

这与您的逻辑相反,您正在寻找使用==的理由,而不是寻找不使用{{1}}的理由。

答案 2 :(得分:-1)

===通常比==快。

如果比较两个值而忽略它们的类型(==),则javascript通常必须在内部将一个或两个值转换为另一个类型并执行其他检查。

另一方面,

===不必转换任何内容,只需进行一次比较。因此,当您不必担心"1" == 1等案例时,===通常会更快。

在这种情况下,由于typeof始终返回一个字符串,第二个值也是一个字符串,因此不需要==,因此===的使用超出惯例。