【问题标题】:Using square brackets inside an object: Unexpected Token在对象内使用方括号:Unexpected Token
【发布时间】:2015-07-27 01:02:31
【问题描述】:

我省略了一堆上下文,但我认为没有太多必要。我有一堆代码指向具有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 [ 错误。

你不能通过对象中的括号来引用属性吗?这是怎么回事?

【问题讨论】:

    标签: javascript angularjs object


    【解决方案1】:

    {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]});
    

    【讨论】:

    • 正是我想要的。谢谢。
    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2015-12-07
    • 2012-01-31
    相关资源
    最近更新 更多