使用串联(动态)字符串作为JavaScript对象键?
这个代码不起作用。“键+测试”有什么问题 因为使用串联(动态)字符串作为JavaScript对象键?,javascript,syntax,object-literal,Javascript,Syntax,Object Literal,这个代码不起作用。“键+测试”有什么问题 因为“key”+test是一个表达式,而不是标识符、字符串文字或数字文字,这是唯一允许在对象文字中作为key的内容 为此类动态键创建对象后,必须使用[]符号: var test = "test123" var test123 ={ "key" + test: 123 } 标识符基本上是可以调用变量的相同字符子集(字母、数字、\uuu和$;不能以数字开头),字符串文字是用'或“括起来的任何字符串 因此,可以在对象文字中使用的唯一键类型是: var
“key”+test
是一个表达式,而不是标识符、字符串文字或数字文字,这是唯一允许在对象文字中作为key的内容
为此类动态键创建对象后,必须使用[]
符号:
var test = "test123"
var test123 ={
"key" + test: 123
}
标识符基本上是可以调用变量的相同字符子集(字母、数字、\uuu
和$
;不能以数字开头),字符串文字是用'
或“
括起来的任何字符串
因此,可以在对象文字中使用的唯一键类型是:
var test123 = {};
test123["key" + test] = 123;
参考文献:
PropertyName:
识别名
StringLiteral
数字文字
可以,但不能使用文字符号(ES6之前)
您的代码相当于
test123。(“key”+test)=123
,这可以更好地帮助您理解它的错误原因
您需要[“name”]
表示法才能通过字符串中的名称访问字段。其他表示法(您的和
之一)需要标识符。--HTML--
var test123 = {};
test123["foo" + "bar"] = 'baz';
test123.foobar === 'baz'; // true
--JS--
函数getJsonData(){
var hr=新的XMLHttpRequest();
hr.open(“GET”,“bookJson.json”,true);
hr.setRequestHeader(“内容类型”,“应用程序/json”,true);
hr.onreadystatechange=函数(){
如果(hr.readyState==4&&hr.status==200){
var data=JSON.parse(hr.responseText);
for(var i=0;iJavascript提供了两种定义对象属性的方法:
object.propertyName=值
在这种情况下,propertyName不可编辑且不可计算。您无法执行以下操作:
--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"]**
如你所见
object.('property'+'Name')
他们是平等的
可以使用变量作为带有“[]”的属性名称
你可以做:
object = {propertyName:value};
object = {'propertyName':value};
这一次你必须使用一个字符串
var a = "propertyName";
object[a] = value;
使用ES6,您可以在对象文字中定义动态键:
object[propertyName] = value;//error
object["propertyName"] = value;//correct
object = {'propertyName':value};//correct
object = {propertyName:value};//correct
此外,对象文字中也允许数字,例如0
或5e10
(但不是-10
,因为-
不是数字文字的一部分,而是一元-
运算符)@Felix Kling:是的,谢谢。从一个稍微不同的角度来看:谢谢你的简单回答,这正是我想要的:)请提供您的答案的解释,以帮助该网站的其他用户。仅代码的答案不是很有用,而且往往会被标记为低质量并可能被删除。感谢您的建议,我提供了我的答案的解释…感谢这一点-真的需要一种方法使这种语法工作。ES6是一个救世主!这可以用于使用扩展运算符
object[propertyName] = value;//error
object["propertyName"] = value;//correct
object = {'propertyName':value};//correct
object = {propertyName:value};//correct
const test = "test123"
const test123 = { [`key${test}`]: 123 }; //{ keytest123: 123 }