使用属性名称的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属性名称需要用双引号括起来。