在一些开源 JavaScript 项目中,我看到人们使用('function' === typeof x)
. 我想知道为什么人们使用它而不是(typeof x === 'function')
.
我觉得第二种方式更自然。使用第一种方法有什么好的理由吗?表现?潜在的错误?还是只是风格问题?
在一些开源 JavaScript 项目中,我看到人们使用('function' === typeof x)
. 我想知道为什么人们使用它而不是(typeof x === 'function')
.
我觉得第二种方式更自然。使用第一种方法有什么好的理由吗?表现?潜在的错误?还是只是风格问题?
这些被称为“尤达条件”(因为它们听起来像尤达):
有些人更喜欢它们,因为如果错误地使用而不是orInvalid left-hand side in assignment
会引发错误。以最常见的顺序(即 ,将发生静默分配,并将搞砸程序逻辑。=
==
===
if(count = 5)
请注意,这'function' === typeof x
不是一个很好的例子;由于typeof x
将评估为字符串,因此无论操作数的顺序如何,放错位置的赋值运算符在这种情况下总是会抛出错误。
它们是相同的表达方式。当您与==
or进行比较时===
,表达式的哪一侧是什么并不重要。
if(null === myVar)
if('hello' === str)
等都是有效的。
如果两个表达式之一很长,您可能希望将其放在右侧,以便眼睛更容易看到正在比较的内容。
可能没有理由,但它可能在历史上来自 = 和 == 差异,它确实很重要。看东西
if (a = 5)
和
if (5 = a)
是第一个不检查a是否为 5,而是将 5 分配给a。所以人们想出了反向检查,这会引发编译错误,因为你不能分配给5等等。这样你可以在你忘记一个 = 时修复你的代码。所以它也可能是出于一致性目的。
它们是相同的。一些 Java 程序员倾向于以这种方式编写它,作为 Java 中通常的最佳实践来编写null != object.getSomething()
而不是object.getSomeThing() != null
. 这是为了避免可能的NullPointer
但是,在 Javascript 中,这是没有意义的。正如你所指出的, (typeof x === 'function')
这是自然的方式。