javascript - 在对象内使用方括号 : Unexpected Token

标签 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()Object {a: (属性的名称), b: (属性的值)} 如您所愿会期望。

奇怪的是,当我删除 a:b: 键时,即

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

我收到 Uncaught SyntaxError: Unexpected token [ 错误。

是否不允许在对象中通过括号引用属性?这是怎么回事?

最佳答案

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

...the name of the property, and newValue[prop]

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

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

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

// REQUIRES ES6!
$scope.$broadcast('from-parent', {[prop]: newValue[prop]});

关于javascript - 在对象内使用方括号 : Unexpected Token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30253832/

相关文章:

javascript - 如何在不重新渲染的情况下调用 useState react hook 的多个 setter 函数?

Javascript函数回到原来的位置

javascript - 遍历对象时更新状态值

swift - 在 Swift 中比较通用对象

javascript - 如何文本扭曲 "bulge/fisheye"效果?

javascript - 如何正确删除 Angular $scope 变量?

javascript - 模糊触发时如何限制对字段的验证?

javascript - AngularJS <a> 标签链接不起作用

python - 是否允许在 init 方法中使用方法?

javascript - 在 Coffeescript 中自定义自动完成下拉菜单