Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用属性名的变量创建对象_Javascript_Properties_Object Literal - Fatal编程技术网

Javascript 使用属性名的变量创建对象

Javascript 使用属性名的变量创建对象,javascript,properties,object-literal,Javascript,Properties,Object Literal,是否可以在对象文字属性中使用变量名来创建对象 范例 function createJSON (propertyName){ return { propertyName : "Value"}; } var myObject = createJSON("myProperty"); console.log(myObject.propertyName); // Prints "value" console.log(myObject.myProperty); // This propert

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

范例

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

如果要使用变量作为属性名称,可以使用。将变量名放在方括号内:

var foo = "bar";
var ob  = { [foo]: "something" }; // ob.bar === "something"
如果您希望Internet Explorer支持,则需要使用ES5方法(您可以通过编写现代语法(如上所述)然后应用来获得):

首先创建对象,然后使用添加属性


如果希望通过编程方式创建JSON,则必须将对象序列化为符合JSON格式的字符串。e、 g.有

您可以这样做:

  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:

一件可能合适的事情(现在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属性名需要用双引号括起来。

ES6引入了计算属性名,这使您可以

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

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

有趣的是,有关于浏览器支持的更新吗?当我写下答案时,只有Firefox几乎没有更新。现在Firefox 34+和Safari 7.1.3+,这对我来说是最好的答案。从2020年开始,除了IE,所有浏览器都支持计算属性名。
function CreateJSON (propertyName){
    var myObject = { [propertyName] : "Value"};
}