在对象内使用方括号:意外的令牌

时间:2015-05-15 07:23:38

标签: javascript angularjs object

我遗漏了一大堆背景,但我不认为有很多必要。我有一堆代码导致具有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()&#39} 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 [错误。

您是否不允许通过对象中的括号引用属性?这里发生了什么?

1 个答案:

答案 0 :(得分:2)

{prop, newValue[prop]}不会使用prop变量中的名称创建属性,它最终会成为无效的对象初始值设定项 - 而不是[]({{1}也会失败),但是因为对象初始化器不能这样工作。

  

...属性的名称和newValue [prop]

要从变量中为对象提供属性名称,在ES5中必须先创建对象,然后然后添加属性:

{prop, "foo"}

在ES6中,您将能够使用新的动态属性名称表示法:

var obj = {};
obj[prop] = newValue[prop];
$scope.$broadcast('from-parent', obj);