我想用另一個對象構建一個對象作爲參數映射。參數不是強制性的。如果在對象中提取對象的值 - 引用錯誤
爲什麼我不能做到以下幾點:
var Key = function(args) {
text in args && this.text = args.text;
};
到我的成員初始化單行?我真的應該如果()...?
感謝您的幫助!
我想用另一個對象構建一個對象作爲參數映射。參數不是強制性的。如果在對象中提取對象的值 - 引用錯誤
爲什麼我不能做到以下幾點:
var Key = function(args) {
text in args && this.text = args.text;
};
到我的成員初始化單行?我真的應該如果()...?
感謝您的幫助!
問題的原因是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)
表達式的結果,該表達式無效,因爲它不是對可解析標識符的分配。因爲我們現在看到我們需要手動強制執行=
運算符的優先級,所以我們可以使用我們期望它操作的操作數來包裝它,並調整&&
的參數。
((text in args) && (this.text = args.text));
而且因爲我們知道,優先級的其餘部分自然制定了罰款爲我們的本意,我們可以擺脫對方括號中。
text in args && (this.text = args.text);
完整的錯誤消息是'ReferenceError:賦值中無效的左側',這就解釋了爲什麼它不起作用以及爲什麼你的答案修復了它。 –
爲什麼不使用'if()'?它最終會成爲與您的解決方案相同數量的字符,並且會更清晰地閱讀。 'if(args中的文本)this.text = args.text' –
當我使用if時,我總是添加括號,以便保持我的代碼統一,以便佔用三行。 – Virus721