我想使用另一个对象作为参数映射来构造一个对象。参数不是强制性的。
为什么我不能执行以下操作:
var Key = function( args ) {
text in args && this.text = args.text;
};
在一行中初始化我的成员?我真的必须这样做 if() ... 吗?
谢谢你的帮助 !
我想使用另一个对象作为参数映射来构造一个对象。参数不是强制性的。
为什么我不能执行以下操作:
var Key = function( args ) {
text in args && this.text = args.text;
};
在一行中初始化我的成员?我真的必须这样做 if() ... 吗?
谢谢你的帮助 !
问题的原因是运算符优先级与预期含义不一致。
该表达式语句中的最高优先级是.
运算符。因为它具有任何运算符的最高优先级,所以我不会费心使用括号。
下一个最高优先级是in
运算符,所以我们可以先用它的操作数包装它。
(text in args) && this.text = args.text;
之后,&&
运算符具有下一个最高优先级,所以我们可以再次用它的操作数包装它。
((text in args) && this.text) = args.text;
所以现在我们可以看到这个问题。我们正在尝试将 分配给表达式args.text
的结果((text in args) && this.text)
,这是无效的,因为它不是对可解析标识符的分配。
因为我们现在看到我们需要手动强制执行=
运算符的优先级,所以我们可以用我们期望它操作的操作数包装它,并调整&&
.
((text in args) && (this.text = args.text));
而且因为我们知道其余的优先级自然而然地符合我们的意图,所以我们可以摆脱其他的parens。
text in args && (this.text = args.text);