标题基本上。这样的构造是否被视为不良做法或者可能导致javascript中的某些意外行为?
if (e.target.name in {name: '', number: ''}) {
// do something
}
它检查“对象”键中是否存在HTMLNode属性名称,并在其执行的情况下继续。如果点击的东西是我们需要的基本检查。 它是否比这样的表现更好\更差?
if(['name','number'].some(a=>a==e.target.name)) {
// do something
}
在打字和表现方面做出此类检查的最佳方法是什么?
答案 0 :(得分:1)
是的,它可能会有问题,因为in
运算符会检查所有原型链,因此您可能会出现意外的正面结果。
"constructor" in {name: '', number: ''} // true !!
如果您仍希望获得持续的性能,则可以使用集合,但对于小的情况,Array#includes
可能更具可读性。
new Set(['name', 'number']).has(e.target.name);
['name', 'number'].includes(e.target.name);