在一些开源JavaScript项目中,我看到人们使用('function' === typeof x)
检查变量是否是函数。我想知道为什么人们使用它代替(typeof x === 'function')
。
我觉得第二种方式更自然。有没有什么好的理由使用第一种方式?性能?错误潜力?或者只是风格问题?
答案 0 :(得分:12)
这些被称为“尤达条件”(因为它们听起来像尤达):
有些人更喜欢它们,因为如果错误地使用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')
是自然的方式。