我正在像这样使用&&
,它有效
typeof foo === 'function' && foo(); //if foo exist then call it
代替
if (typeof foo === 'function') { foo(); }
做错了还是只是风格和品味问题?对我来说,这很自然,我想使用&&
,但是现在有一个短毛猫抱怨:期望一个赋值或函数调用,而是看到一个表达式。
这里可能有任何实际问题吗?还是只是出于惯例?
这是一个代码段:
function foo(x) {
console.log("foo say " + x)
}
function bar(x) {
console.log("bar say " + x)
}
let s = "OK"
typeof foo === 'function' && foo(s)
if (typeof bar === 'function') bar(s)
/*
Function noo() does not exist.
Error to try call it is prevented by the check.
noo && noo() is not enough, so typeof is a must!
*/
typeof noo === 'function' && noo()
console.log("OK so far")
注释
&&
作为存在(声明和定义)的检查。 &&
的左侧失败,则右侧将不会执行return
和分配中也很有用,但if
却没有。如果需要 else 部分,请使用?
。 then else 部分必须返回相同的类型。typeof
并已改正,但在评论中看到它错过了。在我们大家都表现出理解的同时,也许是常见的错误或只是写得容易。但是正确的是(我认为)-检查存在性的唯一方法是使用typeof
,instanceof
或try
,但window
除外,例如您可以{{1} }。history && history.back()
。 At least one catch clause, or a finally clause, must be present。try { foo(); }; catch (e) {};
等于if (a()) {b(); c()}
,因为函数可以同时存在于语句和表达式中。使用comma operator。a() && (b(), c())
时,它无需再次返回(这称为确定性函数的记忆)答案 0 :(得分:3)
lint的工作是寻找在语法上有效可能不遵循建议的最佳做法的事物。
“预期分配或函数调用”可能意味着它期望foo
在第一部分中是foo()
或foo =
,在没有调用的情况下看到它是,一个错误。
您可以随意做任何想做的事情。短路评估的行为具有可预测性,因此可以正常工作,但可能会使不熟悉该样式的人感到困惑。
答案 1 :(得分:3)
您可以使用void
operator。这将对表达式求值并返回undefined
。
void (foo && foo());
var foo;
void (foo && foo());
foo = () => console.log('foo');
void (foo && foo());
答案 2 :(得分:2)
在&&
的背景中还有很多东西,但是在99%的情况下,这样做是完全可以的,就像这样。
现在,作为个人观点,对于单行代码,我更喜欢使用&&
而不是if
的方式,因为在下面没有空格的情况下,我无法忍受if
关键字呵呵。
如果您知道自己在做什么,那么短绒棉有时会变得过于挑剔。