如果在对象中,则从对象中提取值 - 引用错误

时间:2013-08-02 12:43:23

标签: javascript object reference

我想使用另一个对象作为参数映射构造一个对象。参数不是强制性的。

为什么我不能做以下事情:

var Key = function( args ) {
    text in args && this.text = args.text;
};

在一行中初始化我的成员?我必须真的做if()......?

感谢您的帮助!

1 个答案:

答案 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);