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