为什么使用('function'=== typeof x)而不是(typeof x ==='function')

Yos*_*shi 2 javascript conditional typeof

在一些开源JavaScript项目中,我看到人们检查变量是否是函数('function' === typeof x).我想知道为什么人们会使用它而不是(typeof x === 'function').

我觉得第二种方式更自然.有没有什么好的理由使用第一种方式?性能?错误潜力?或者只是风格问题?

bfa*_*tto 12

这些被称为"尤达条件"(因为它们听起来像尤达):

尤达

有些人更喜欢它们,因为Invalid left-hand side in assignment如果=误用而不是==或者使用会引发错误===.按照最常见的顺序(即,if(count = 5)将发生静默分配,并将搞砸程序逻辑.

请注意,这'function' === typeof x不是一个好例子; 因为typeof x将评估为字符串,所以在这种情况下,错位的赋值运算符将始终抛出错误,而不管操作数的顺序如何.

  • @hop 恰恰相反!忘记示例“typeof x === 'function'”,因为无论顺序是什么,它都应该抛出带有“=”的错误(由于“typeof”返回一个字符串)。但是 `count = 5` 将默默地分配给 `count` (逻辑错误),而 `5 = count` 将抛出异常,在错误控制台中很明显。 (2认同)

mar*_*ful 7

它们是相同的表达.当你与==or 比较时===,表达式的哪一侧无关紧要.

if(null === myVar)

if('hello' === str)
Run Code Online (Sandbox Code Playgroud)

等都是有效的.

如果两个表达式中的一个很长,你可能想把它放在右侧,这样眼睛就可以更容易地看到被比较的内容.