2

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

我觉得第二种方式更自然。使用第一种方法有什么好的理由吗?表现?潜在的错误?还是只是风格问题?

4

4 回答 4

12

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

尤达

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

请注意,这'function' === typeof x不是一个很好的例子;由于typeof x将评估为字符串,因此无论操作数的顺序如何,放错位置的赋值运算符在这种情况下总是会抛出错误。

于 2013-02-26T16:46:45.550 回答
7

它们是相同的表达方式。当您与==or进行比较时===,表达式的哪一侧是什么并不重要。

if(null === myVar)

if('hello' === str)

等都是有效的。

如果两个表达式之一很长,您可能希望将其放在右侧,以便眼睛更容易看到正在比较的内容。

于 2013-02-26T16:41:09.933 回答
2

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

if (a = 5)

if (5 = a)

是第一个不检查a是否为 5,而是将 5 分配给a。所以人们想出了反向检查,这会引发编译错误,因为你不能分配给5等等。这样你可以在你忘记一个 = 时修复你的代码。所以它也可能是出于一致性目的。

于 2013-02-26T16:46:26.807 回答
0

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

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

于 2013-02-26T16:45:20.973 回答