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

时间:2013-02-26 16:40:05

标签: javascript conditional typeof

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

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

4 个答案:

答案 0 :(得分:12)

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

yoda

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

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

答案 1 :(得分:7)

它们是相同的表达方式。当您与=====进行比较时,表达式的哪一侧无关紧要。

if(null === myVar)

if('hello' === str)

等。都是有效的。

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

答案 2 :(得分:2)

没有可能没有理由,但它可能在历史上来自=和==差异,它确实很重要。用

查看事物
if (a = 5)

if (5 = a)

是第一个不检查 a 是否为5,它将5分配给 a 。所以人们提出了反向检查,这会导致编译错误,因为你无法分配到 5 等。这样你就可以修改你的代码,如果你忘了一个=。因此,它也可能是出于一致性目的。

答案 3 :(得分:0)

他们是完全相同的。一些Java程序员倾向于以这种方式编写它作为Java中通常的最佳实践来编写null != object.getSomething()而不是object.getSomeThing() != null。这是为了避免可能的 NullPointer

但是,在Javascript中这没有任何意义。正如你所指出的,(typeof x === 'function')是自然的方式。