javascript - "if"双符号速记

标签 javascript if-statement ampersand shorthand

我看过这些行代码。

this.tween && this.tween.kill(),
this.tween = TweenMax.to(object, 1, {
  ...
})

这是

的简写吗
if(this.tween){
  this.tween.kill();
}
this.tween = TweenMax.to(object, 1, {
  ...
})

谢谢;)

最佳答案

是的,两者在执行上是等价的。

function test(value) {
  console.log(value);
  
  value && console.log("\texecute using AND");
  if (value) console.log("\texecuted using if");
}

test(true);
test(false);
test("string");
test(""); //empty string
test(0);
test(null);
test(undefined);
test(1);
test({});

但是,尽管如此,这并不是 JavaScript 的惯用用法。所以你可能不应该使用这个结构,因为它会让其他开发人员望而却步。您的示例很好地说明了这一点,代码看起来像

function f (condition) {
  condition && one(),
  two();
}

function one() {
  console.log("one");
}

function two() {
  console.log("two")
}

f(false);
f(true);

这确实有效

function f(condition) {
  if (condition) {
    one();
 }

  two();
}

因此,one() 会执行几次,而 two 会一直执行。但是,在不知道优先级规则的情况下,both one()two() 似乎会有条件地执行。这是一个很容易犯的错误,如果是复杂的条件和逻辑,则更容易犯此错误

person.account.moneyAmount > 0 && creditor.getDebt(person).moneyOwed > 0 && person.account.moneyAmount > creditor.getDebt(person).moneyOwed  && (deductTaxes(payAndReturnAmount(person, creditor)), printStatement()), printHello()

这只是稍微夸大了一点,但完全有可能以类似的情况结束。如果您的代码像单个条件和单个操作一样简单,那么使用内联条件与使用 if 语句

相比,您可以节省 2 个字节
condition && action()
if (condition) action()
                     ^^
"extra" characters __||

关于javascript - "if"双符号速记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55585610/

相关文章:

c - 输入退出条件后陷入死循环。

search - 使用 & 符号进行 Marklogic 搜索

regex - 我可以在 HTML5 模式属性中使用包含 & 符号的正则表达式吗?

javascript - 如何 : Produce mongoDB query string for the fields dynamically from a javascript app

python - Lambda 而不是 "if"语句

java - if 语句多久执行一次?

mysql - 如果字符串包含符号 '&',则类似查询不起作用

javascript - 如何使用 Angular 8 为对象数组提供不同的日期

JavaScript 函数返回

javascript - draft-js:将原始内容/HTML转换回EditorState后,文本颜色丢失