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