从性能/最佳实践的角度来看,做这样的检查是否更好:
if ('x' in y)
或者这个:
if (y.x)
除了第一次返回false
和第二次返回undefined
之外,它们之间是否存在差异?
答案 0 :(得分:3)
如果您只想在该对象中查找属性,可以使用hasOwnProperty
,如果在原型中查找,则可以使用in
语句。
是的,有区别。如果您的x
属性存在,但其值为undefined
- y.x
将返回给您undefined
,无论是x
属性还是其值undefined
。
看一下这个示例,x
存在于对象但z
没有,而访问y.x
和y.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,您可以认为该属性确实存在不存在。而是尝试使用hasOwnProperty
或in
。
答案 1 :(得分:1)
如果y.x
中存在x
,我猜y
也会在解析后获取值。 'x' in y
只会进行搜索,然后会更快。
这没有考虑它会如何影响if()
。