如何从JavaScript中的variables值创build对象属性?

我想添加一个新的属性给'myObj',命名为'string1',并给它一个'string2'的值,但是当我这样做时,它返回'undefined:

var myObj = new Object; var a = 'string1'; var b = 'string2'; myObj.a = b; alert(myObj.string1); //Returns 'undefined' alert(myObj.a); //Returns 'string2' 

换句话说:我如何创build一个对象属性,并将其名称存储在variables中,而不是variables本身的名称?

有点符号和括号符号

 myObj[a] = b; 

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

 var myObj = {[a]: b}; 

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

点符号和属性是等价的。 所以你会这样做:

 var myObj = new Object; var a = 'string1'; myObj[a] = 'whatever'; alert(myObj.string1) 

(警告“无论”)

Ecu,如果你做了myObj.a ,那么它会查找名为myObj的属性。 如果你做myObj[a] =b那么它会查找myObj的a.valueOf()属性。

Oneliner:

 obj = (function(attr, val){ var a = {}; a[attr]=val; return a; })('hash', 5); 

要么:

 attr = 'hash'; val = 5; var obj = (obj={}, obj[attr]=val, obj); 

还有更短的吗?

你可以使用这个:

 function createObject(propName, propValue){ this[propName] = propValue; } var myObj1 = new createObject('string1','string2'); 

作为第一个parameter passing的任何东西都是属性名称,第二个参数是属性值。

由于$ scope是一个对象,所以您可以使用JavaScript来尝试:

 $scope['something'] = 'hey' 

它等于:

 $scope.something = 'hey' 

我创build了一个小提琴来testing 。

您不能使用variables通过点符号访问属性,而是使用数组符号。

 var obj= { 'name' : 'jroi' }; var a = 'name'; alert(obj.a); //will not work alert(obj[a]); //should work and alert jroi' 

以下演示了使用(a, b)的forms返回密钥对对象的另一种方法。 第一个示例使用string'key'作为属性名称, 'val'作为值。

示例#1:

 (function(o,a,b){return o[a]=b,o})({},'key','val'); 

例如:#2:

 var obj = { foo: 'bar' }; (function(o,a,b){return o[a]=b,o})(obj,'key','val'); 

如第二个示例所示,这也可以修改现有对象(如果属性已经在对象中定义,则值将被覆盖)

结果#1: { key: 'val' }

结果#2: { foo: 'bar', key: 'val' }