使用连接(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提供了两种方法来定义对象的属性:
- object.propertyName = value;
在这种情况下,propertyName是不可编辑的,并且是不可计算的。 你不能做到以下几点:
object.('property'+'Name')
如你看到的
object = {propertyName:value}; object = {'propertyName':value};
他们是平等的
- 你可以使用一个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"]**