是“if({'oneoption'中的somestring':false,'secondoption':false})”在javascript中被认为是不好的做法?

时间:2016-12-15 17:09:49

标签: javascript performance

标题基本上。这样的构造是否被视为不良做法或者可能导致javascript中的某些意外行为?

if (e.target.name in {name: '', number: ''}) {
  // do something
}

它检查“对象”键中是否存在HTMLNode属性名称,并在其执行的情况下继续。如果点击的东西是我们需要的基本检查。 它是否比这样的表现更好\更差?

if(['name','number'].some(a=>a==e.target.name)) {
  // do something
}

在打字和表现方面做出此类检查的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

是的,它可能会有问题,因为in运算符会检查所有原型链,因此您可能会出现意外的正面结果。

"constructor" in {name: '', number: ''} // true  !!

如果您仍希望获得持续的性能,则可以使用集合,但对于小的情况,Array#includes可能更具可读性。

new Set(['name', 'number']).has(e.target.name);
['name', 'number'].includes(e.target.name);