var test = "test123"
var test123 ={
"key" + test: 123
}
此代码不起作用。"key" + test 有什么问题?
var test = "test123"
var test123 ={
"key" + test: 123
}
此代码不起作用。"key" + test 有什么问题?
因为"key" + test
是表达式而不是标识符、字符串文字或数字文字,它们是唯一允许作为对象文字中的键的东西。
[]
在为这样的动态键创建对象后,您必须使用符号:
var test123 = {};
test123["key" + test] = 123;
标识符基本上是可以称为变量的字符子集(字母、数字_
和$
; 不能以数字开头),而字符串文字是用'
或括起来的任何字符串"
。
因此,您可以在对象字面量中使用的唯一类型的键是:
{
a0: true, // valid identifier
$$_: true, // same
123: true, // valid numeric literal
012: true, // same (octal)
0xf: true, // same (hex)
"@": true, // not allowed as an identifier
'0a': true // same
}
参考:http : //es5.github.com/#x11.1.5。
物业名称:
标识符名称
字符串字面量
数字文字
使用 ES6,您可以在对象字面量中定义动态键:
const test = "test123"
const test123 = { [`key${test}`]: 123 }; //{ keytest123: 123 }
您可以但不能使用文字符号(ES6 之前)。
var test123 = {};
test123["foo" + "bar"] = 'baz';
test123.foobar === 'baz'; // true
您的代码相当于test123.("key" + test) = 123
which 可以更好地帮助您理解为什么它是错误的。
您需要["name"]
符号才能通过字符串中的名称访问字段。其他符号(你的和.
一个)需要标识符。
Javascript 提供了两种方式来定义对象的属性:
在这种情况下,propertyName 是不可编辑和不可计算的。您不能执行以下操作:
object.('property'+'Name')
如你看到的
object = {propertyName:value};
object = {'propertyName':value};
他们是平等的
你可以做 :
var a = "propertyName";
object[a] = value;
这一次你必须使用一个字符串
object[propertyName] = value;//error
object["propertyName"] = value;//correct
object = {'propertyName':value};//correct
object = {propertyName:value};//correct