var test = "test123"
var test123 ={
"key" + test: 123
}
此代码不起作用。 “关键”+测试有什么问题?使用连接(动态)字符串作为JavaScript对象键?
var test = "test123"
var test123 ={
"key" + test: 123
}
此代码不起作用。 “关键”+测试有什么问题?使用连接(动态)字符串作为JavaScript对象键?
因为"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。
的PropertyName:
IdentifierName
串文字
NumericLiteral
此外,对象字面也允许使用数字,例如'0'或'5e10'(但不是'-10',因为'-'不是'数字字面,但一元'-'运算符)。 – 2012-03-14 19:02:01
@Felix Kling:的确是他们,谢谢。 – pimvdb 2012-03-14 19:04:55
你可以但不能用文字符号(ES6)。
var test123 = {};
test123["foo" + "bar"] = 'baz';
test123.foobar === 'baz'; // true
感谢您的简单回答,这就是我一直在寻找:) – 2015-02-26 03:28:44
您的代码相当于test123.("key" + test) = 123
这可能会更好地帮助您了解为什么它是错误的。
您需要["name"]
表示法才能通过字符串中的名称访问字段。其他符号(您的和.
之一)需要标识符。
--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"]**
请提供解释您的答案,以帮助其他用户的网站。仅有代码的答案不是很有用,往往被标记为低质量并可能被删除。 – Tristan 2016-02-05 02:18:58
感谢您的建议,我提供了我的答案的解释... – 2016-02-10 04:44:01
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
随着ES6,您可以将对象文本中定义的动态密钥:
const test = "test123"
const test123 = { ["key" + test]: 123 };
从一个不同的角度:http://stackoverflow.com/questions/2241875/how-to-create-objec t-property-from-variable-value-in-javascript – 2012-03-14 19:10:51