Javascript 为什么使用(';函数';==typeof x)而不使用(';函数';)

Javascript 为什么使用(';函数';==typeof x)而不使用(';函数';),javascript,conditional,typeof,Javascript,Conditional,Typeof,在一些开源JavaScript项目中,我看到人们用('function'==typeof x)检查变量是否为函数。我想知道为什么人们用它来代替(typeof x=='function') 我觉得第二种方式更自然。有什么好的理由使用第一种方法吗?演出潜在错误?还是只是风格的问题?它们是相同的表达方式。当您与=或==进行比较时,表达式的哪一边是什么并不重要 if(null === myVar) if('hello' === str) 等等都是有效的 如果两个表达式中有一个很长,您可能希望将其放在

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


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

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

if(null === myVar)

if('hello' === str)
等等都是有效的


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

它们是相同的。一些Java程序员倾向于这样编写,这是Java中编写
null!=object.getSomething()
而不是
object.getSomething()!=空
。这是为了避免可能的空指针


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

可能没有任何原因,但它可能来自于=和==的差异,这一点很重要。看到这件事了吗

if (a = 5)

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

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

有些人更喜欢它们,因为如果错误地使用了
=
而不是
=
==
,则会抛出赋值中的
无效左手边。按照最常见的顺序(即,
if(count=5)
),将发生静默赋值,并将扰乱程序逻辑


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

只是首选项和/或习惯。如果键入并仅将
=/code>放在左边,则将文本放在i是的,质疑Yoda条件的使用与质疑CamelCase vs under_score的使用一样有用。或者为什么香草冰淇淋是最糟糕的。@Bergi你明白我的意思了吗?我打算添加完全相同的图片!我自己也在尝试提交答案,但你比我和我的di都快d没有任何改进:-)但是,我不知道这是没有理由的。您的逻辑即将中断,这种方法在测试中比语法错误更容易被忽略@跳,恰恰相反!忘记示例
typeof x==='function'
,因为无论顺序如何(由于
typeof
返回字符串),它都应该抛出
=
错误。但是
count=5
将自动分配给
count
(逻辑错误),而
5=count
将抛出异常,在错误控制台中可以看到。
if (5 = a)