使用串联(动态)字符串作为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 }