【问题标题】:create object using variables for property name [duplicate]使用属性名称的变量创建对象[重复]
【发布时间】:2011-03-10 09:34:10
【问题描述】:

是否可以在对象文字属性中使用变量名来创建对象?

例子

function createJSON (propertyName){
    return { propertyName : "Value"};
}

var myObject = createJSON("myProperty");

console.log(myObject.propertyName);  // Prints "value"
console.log(myObject.myProperty);  // This property does not exist

【问题讨论】:

    标签: javascript properties object-literal


    【解决方案1】:

    如果你想使用一个变量作为属性名,你可以使用Computed Property Names。将变量名放在方括号之间:

    var foo = "bar";
    var ob  = { [foo]: "something" }; // ob.bar === "something"
    

    如果您想要 Internet Explorer 支持,您将需要使用 ES5 方法(您可以通过编写现代语法(如上)然后应用 Babel 来获得):

    先创建对象,然后使用square bracket notation添加属性。

    var foo = "bar";
    var ob  = {};
    ob[foo] = "something"; // === ob.bar = "something"
    

    如果您想以编程方式创建 JSON,则必须将对象序列化为符合 JSON 格式的字符串。例如与the JSON.stringify method

    【讨论】:

      【解决方案2】:

      ES6 引入了计算属性名,让你可以这样做

      function CreateJSON (propertyName){
          var myObject = { [propertyName] : "Value"};
      }
      

      注意浏览器支持目前可以忽略不计。

      【讨论】:

      • 有意思,浏览器支持有什么更新吗?
      • 当我写答案时,只有 Firefox Nigthly。现在 Firefox 34+ 和 Safari 7.1.3+,根据MDN.
      • 这对我来说是最好的答案。我正在使用 nodejs。
      • 自 2020 年起,除 IE 外,所有浏览器现在都支持计算属性名称。
      【解决方案3】:

      你可以这样做:

        var myObject = {};
        CreateProp("myProperty","MyValue");
      
        function CreateProp(propertyName, propertyValue)
        {
            myObject[propertyName] = propertyValue;
            alert(myObject[propertyName]);  // prints "MyValue" 
        };
      

      我自己更喜欢这种语法:

      function jsonObject()
      {
      };
      var myNoteObject = new jsonObject();
      
      function SaveJsonObject()
      {
          myNoteObject.Control = new jsonObject();
          myNoteObject.Control.Field1= "Fred";
          myNoteObject.Control.Field2= "Wilma";
          myNoteObject.Control.Field3= "Flintstone";
          myNoteObject.Control.Id= "1234";
          myNoteObject.Other= new jsonObject();
          myNoteObject.Other.One="myone";
      };
      

      然后你可以使用以下内容:

      SaveJsonObject();
      var myNoteJSON = JSON.stringify(myNoteObject);
      

      注意:这里使用了 json2.js:http://www.json.org/js.html

      【讨论】:

        【解决方案4】:

        可能合适的一件事(现在 JSON 功能在较新的浏览器中很常见,而 json2.js 是一个完全有效的后备),就是构造一个 JSON 字符串,然后对其进行解析。

        function func(prop, val) {
            var jsonStr = '{"'+prop+'":'+val+'}';
            return JSON.parse(jsonStr);
        }
        
        var testa = func("init", 1);
        console.log(testa.init);//1
        

        请记住,JSON 属性名称需要用双引号括起来。

        【讨论】:

          猜你喜欢
          • 2013-06-19
          • 1970-01-01
          • 2013-07-23
          • 2011-11-29
          相关资源
          最近更新 更多