在许多代码示例中,我确实看到人们在使用===
进行类型检查时使用typeof
。
但typeof
始终返回string
。无论你正在检查哪个变量。那么为什么要使用===
进行类型检查?
示例:
if(typeof num === 'number')
// do something
有没有我不知道的边缘案例?
答案 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
始终返回一个字符串,第二个值也是一个字符串,因此不需要==
,因此===
的使用超出惯例。