【问题标题】:shorthand for conditions like (x === y) || (x === z)? [duplicate](x === y) || 等条件的简写(x === z)? [复制]
【发布时间】:2020-05-11 06:27:56
【问题描述】:

如果可以简化这个场景,我想让我的情况更容易阅读和徘徊:

if((x === y)||(x === z)){...}
//and this one: 
x = (x === y) || (x === z)? ... : ...; 

//To something like: 
if(x === (y || z)){...}
x = x === (y || z) ?  ... : ...; 

这将摆脱大量的括号和变量重复以及“听起来”合乎逻辑的(至少对我而言): 如果这个 var x 是这个或那个,那么我会这样做。

特别是当 x 是一些长对象引用时,例如:

this.someObject.KeyOfKeys[200].language === this.someOtherObject.KeyY.languages[10] || ...; 

或者你如何处理逻辑“容易”但写起来很麻烦的条件?

【问题讨论】:

  • 是的,in 运算符不起作用。我忘了它适用于属性,而不是值。因此,将适用于(在数组的情况下)索引,而不是值。
  • 也许将比较/分配外包给一个私有函数会更容易,该函数只做这个并且有一个好名字来描述你想要实现的目标?
  • 也许这是适合你的地方codereview.stackexchange.com
  • @Pac0 它在哪里说 OP 想要获取被检查的值?我可能错过了。
  • @Pac0 啊,也许吧。这目前只是分配一个布尔值。 telion,您能否澄清一下您是要获取成功比较的值还是只想检查一个值是否包含在一组值中?

标签: javascript conditional-statements


【解决方案1】:

你可以像这样使用includes()

if ([y, z].includes(x)) { ... }
x = [y, z].includes(x) ? ... : ...;

如 cmets 中所述,这不适用于 IE11 和旧版浏览器。

【讨论】:

  • Includes 在 IE 中不起作用,因此应谨慎使用
  • 我完全赞成使用在 IE 中不起作用的所有可能的代码,最终迫使世界使用现代浏览器并为我们节省大量额外的工作。
猜你喜欢
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
相关资源
最近更新 更多