【发布时间】:2012-03-14 18:45:56
【问题描述】:
var test = "test123"
var test123 ={
"key" + test: 123
}
此代码不起作用。 “关键”+测试有什么问题?
【问题讨论】:
标签: javascript syntax object-literal
var test = "test123"
var test123 ={
"key" + test: 123
}
此代码不起作用。 “关键”+测试有什么问题?
【问题讨论】:
标签: javascript syntax object-literal
因为"key" + test 是一个表达式,而不是标识符、字符串文字或数字文字,它们是唯一允许作为对象文字中的键的东西。
在为这样的动态键创建对象后,您必须使用[] 表示法:
var test123 = {};
test123["key" + test] = 123;
标识符基本上是可以调用变量的字符子集(字母、数字、_ 和 $;可能不以数字开头),字符串文字是用 @987654327 括起来的任何字符串@ 或"。
因此,您可以在对象字面量中使用的唯一类型的键是:
{
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。
属性名称:
标识符名称
字符串字面量
数字字面量
【讨论】:
0 或5e10(但不是-10,因为- 不是数字字面量的一部分,而是一元的一部分- 运营商)。
使用 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,它可以更好地帮助您理解错误的原因。
您需要["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
【讨论】:
--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"]**
【讨论】: