[英]Using square brackets inside an object: Unexpected Token
我省略了一堆上下文,但我認為沒有很多必要。 我有一堆代碼通向具有prop
屬性的對象。 然后我設置了一個$scope.$watch
來觀察對象,然后,本質上,廣播prop
屬性的名稱,以及newValue[prop]
,這個屬性的值。 它看起來有點像這樣:
$scope.$watch(function(){return object;}, function(newValue, oldValue) {
for (var prop in object) {
if (newValue[prop] !== oldValue[prop]) {
$scope.$broadcast('from-parent', {a: prop, b: newValue[prop]});
}
}
};
正如您所期望的那樣,廣播消息console.log()
輸出Object {a: (the property's name), b: (the value of the property)}
。
奇怪的是,當我刪除a:
和b:
鍵時,即
$scope.$broadcast('from-parent', {prop, newValue[prop]});
我收到一個Uncaught SyntaxError: Unexpected token [
錯誤。
不允許通過對象中的方括號引用屬性嗎? 這里發生了什么?
{prop, newValue[prop]}
不會使用prop
變量中的名稱創建屬性,它最終只是一個無效的對象初始值設定項——不是因為[]
( {prop, "foo"}
也會失敗),但因為對象初始值設定項不能那樣工作。
...屬性的名稱和 newValue[prop]
要從變量中給對象一個屬性名稱,在 ES5 中,您必須首先創建對象,然后添加屬性:
var obj = {};
obj[prop] = newValue[prop];
$scope.$broadcast('from-parent', obj);
在 ES6 中,您將能夠使用新的動態屬性名稱表示法:
// REQUIRES ES6!
$scope.$broadcast('from-parent', {[prop]: newValue[prop]});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.