检查财产存在的最佳做法

时间:2017-12-01 20:14:50

标签: javascript conditional-statements

从性能/最佳实践的角度来看,做这样的检查是否更好:

if ('x' in y)

或者这个:

if (y.x)

除了第一次返回false和第二次返回undefined之外,它们之间是否存在差异?

2 个答案:

答案 0 :(得分:3)

如果您只想在该对象中查找属性,可以使用hasOwnProperty,如果在原型中查找,则可以使用in语句。

是的,有区别。如果您的x属性存在,但其值为undefined - y.x将返回给您undefined,无论是x属性还是其值undefined

看一下这个示例,x存在于对象但z没有,而访问y.xy.z会得到相同的结果。



const y = { x: undefined };

if ('x' in y) {
   console.log('x exists on y object');
}

console.log(y.x);
console.log(y.z);




因此,使用y.x检查属性存在并不是一个好方法,您可能会遇到逻辑问题,因为每个虚假值都会返回给您false,您可以认为该属性确实存在不存在。而是尝试使用hasOwnPropertyin

答案 1 :(得分:1)

如果y.x中存在x,我猜y也会在解析后获取值。 'x' in y只会进行搜索,然后会更快。

这没有考虑它会如何影响if()