使用属性名称的variables创build对象

是否可以在对象字面值属性中使用variables名来创build对象?

function createJSON (propertyName){ return { propertyName : "Value"}; } var myObject = createJSON("myProperty"); console.log(myObject.popertyName); // prints "value" console.log(myObject.myProperty); // Does not exist 

如果在JavaScript中想要使用variables作为属性名称,则必须先创build对象,然后使用方括号表示来指定该属性。

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

如果您想以编程方式创buildJSON,则必须将该对象序列化为符合JSON格式的string。 例如使用json.org上的JavaScript JSON库的stringify方法

ES6引入了计算的属性名称,可以让你做

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

注意浏览器支持目前是微不足道的。

你可以这样做:

  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

有一件事可能是合适的(现在JSONfunction对于较新的浏览器是通用的,而json2.js是一个完全有效的后备),是构build一个JSONstring然后parsing它。

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

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