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