通过短路分配获取对象的属性

时间:2019-02-11 14:04:27

标签: javascript

我有一个变量x,可能未定义。如果是这样,我希望使用另一个我知道已定义的变量y。如果定义了x,则它具有属性ay始终具有属性a

如果定义了x.a,我想获取值x,否则我想获取值y.a

// x undefined 
y = { a: 0 };

console.log( (x || y).a )

我希望在屏幕上看到0,但是我得到了RefenceError: x is not defined

3 个答案:

答案 0 :(得分:2)

您可以使用三元运算符:

var z = typeof x === 'undefined' ? y.a : x.a

答案 1 :(得分:1)

x不是undefined,它根本不存在。要使其正常工作,只需添加var x;,如果x已经存在,则可以按预期工作,如果没有,则将其初始化为undefined

 // x = { a: 1 }
 var x, y = { a: 0 };

console.log( (x || y).a );

PS:实际上应该始终定义x(尽管可能是undefined),这才是代码中的实际问题。

答案 2 :(得分:-1)

尝试以下操作:

let result = x && x.a ? x.a : y.a

这就是说,如果定义了x.a,则将结果设置为x.a,否则将其设置为y.a