0

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

为什么我不能执行以下操作:

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

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

谢谢你的帮助 !

4

1 回答 1

1

问题的原因是运算符优先级与预期含义不一致。

该表达式语句中的最高优先级是.运算符。因为它具有任何运算符的最高优先级,所以我不会费心使用括号。


下一个最高优先级是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);
于 2013-08-02T13:04:52.990 回答