簡體   English   中英

在對象內使用方括號:意外令牌

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM