【问题标题】:javascript if..else statement to ? :javascript if..else 语句到 ? :
【发布时间】:2021-11-17 11:48:48
【问题描述】:

这里是新手。感谢您的帮助。

我想知道我可以改变 if ...else ... to 吗? : 以下代码中的声明:

https://codepen.io/lgtits/pen/MWoqPBX?editors=1010

list.addEventListener('click', function (event) {
  let target = event.target
  if (target.classList.contains('delete')) {
    let parentElement = target.parentElement
    parentElement.remove()
  } else if (target.tagName === 'LABEL') { 
    target.classList.toggle('checked')
  }
})

就像这样:

let a = 1

let b = 2

if(a>b) {
  console.log('bigger')
} else if (a === b) {
  console.log('equal')
} else {
  console.log('smaller')
}

a > b ? console.log('bigger') : 
      a === b ? console.log('equal') :
      console.log('smaller')

【问题讨论】:

  • 那里没有else,所以?: 没有多大意义。该代码也不会产生像 ?: 那样的值,所以它是不合适的。
  • 第一个示例中没有其他内容,但您可以这样做 target.classList.contains('delete') && target.parentElement.remove()
  • 这能回答你的问题吗? Multiple Ternary Operators
  • 在询问您是否可以之前,您应该考虑您是否应该... 越短不一定越好。三元语句可以使短赋值更紧凑,但对于像这样较长的块,只需使用if/else
  • 答案是。三元语句用于返回一个。由于您不是在生成值,而是在执行函数,因此在这种情况下不适合使用。

标签: javascript


【解决方案1】:

您可以将第一个块 if...else if 更改为以下内容:

list.addEventListener("click", function (event) {
  let target = event.target;
  // set this ahead of time if needed
  let parentElement = target.parentElement;
  target.classList.contains("delete")
    ? parentElement.remove()
    : target.tagName === "LABEL"
      ? target.classList.toggle("checked")
      : void 0;
});

如果您有太多不同的事情要检查,它可能会变得笨拙,但如果您只在 ifelse 块中分别执行一项操作,它是可行的。请记住确保它是可读的。

【讨论】:

  • 对不起,但它在我的项目中不起作用。它无法删除该项目..
  • 我的错误。我忘记了代码中的.remove()。它应该在那里工作。
  • 我可以把这些放在一行吗?让 parentElement = target.parentElement & parentElement.remove()
  • 如果您稍后要删除该元素,请不要费心将其分配给变量。我认为parentElement 在该行执行后将是未定义的,无论如何对您没有帮助。