我想添加一个新的属性'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'

换句话说:我如何创建一个对象属性并给它存储在变量中的名称,而不是变量本身的名称?


当前回答

ES6引入了计算属性名,允许您执行

var myObj = {[a]: b};

其他回答

ES6引入了计算属性名,允许您执行

var myObj = {[a]: b};

Oneliner:

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

Or:

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

短吗?

因为$scope是一个对象,你可以尝试用JavaScript:

$scope['something'] = 'hey'

它等于:

$scope.something = 'hey'

我做了一把小提琴来测试。

你可以用这个:

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

作为第一个参数传递的任何东西都将是属性名,第二个参数是属性值。

Ecu,如果你做myObj。a,然后查找myObj中名为a的属性。 如果你执行myObj[a] =b,那么它会查找myObj的a. valueof()属性。