繁体   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