使用连接(dynamic)string作为JavaScript对象键?

var test = "test123" var test123 ={ "key" + test: 123 } 

此代码不起作用。 “钥匙”+testing有什么问题?

因为"key" + test是一个expression式,而不是一个标识符,也不是一个string字面值,也不是一个数字字面值,它们是被允许作为对象字面值中的唯一键值。

在为这样的dynamic密钥创build对象之后,你必须使用[]符号:

 var test123 = {}; test123["key" + test] = 123; 

标识符基本上是可以调用variables的字符子集(字母,数字, _$ ;可能不以数字开头),string字面量是用'"括起来的任何string。

所以,可以在对象文字中使用的唯一键types是:

 { 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 。

物业名称

IdentifierName

string字面量

NumericLiteral

使用ES6,您可以在对象文本中定义dynamic键:

 const test = "test123" const test123 = { ["key" + test]: 123 }; 

你可以但不能用文字符号(前ES6)。

 var test123 = {}; test123["foo" + "bar"] = 'baz'; test123.foobar === 'baz'; // true 

你的代码相当于test123.("key" + test) = 123 ,这可能会更好地帮助你理解为什么它是错误的。

您需要["name"]表示法才能通过string中的名称来访问字段。 其他符号(你和.一个)需要标识符。

Javascript提供了两种方法来定义对象的属性:

  1. object.propertyName = value;

在这种情况下,propertyName是不可编辑的,并且是不可计算的。 你不能做到以下几点:

  object.('property'+'Name') 

如你看到的

  object = {propertyName:value}; object = {'propertyName':value}; 

他们是平等的

  1. 你可以使用一个variables作为属性名称与“[]”;

你可以做 :

  var a = "propertyName"; object[a] = value; 

这一次你必须使用一个string

 object[propertyName] = value;//error object["propertyName"] = value;//correct object = {'propertyName':value};//correct object = {propertyName:value};//correct 
 --HTML-- <div id="name1"></div> <div id="name2"></div> <div id="name3"></div> --JS-- function getJsonData(){ var hr = new XMLHttpRequest(); hr.open("GET", "bookJson.json", true); hr.setRequestHeader("Content-type", "application/json", true); hr.onreadystatechange = function() { if(hr.readyState == 4 && hr.status == 200) { var data = JSON.parse(hr.responseText); for(var i=0;i<3;i++){ var a = "p"+(i+1)+"H"; $("#name"+(i+1)).html(data[objName][a]); } } } hr.send(null); } ---JSON--- save JSON file name as bookJson.json { "objName": { "p1H":"content1", "p2H":"content2", "p3H":"content3", } } ----------------------------------- json object key name p1H,p2H,p3H ... We want to dynamically get this keys in javacript instead of **data[objName].p1H**. you can get dynamical key like **data[objName]["p1H"]**