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

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


当前回答

不能使用变量通过点表示法访问属性,而是使用数组表示法。

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

其他回答

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

点表示法和属性是等价的。你可以这样完成:

// const myObj = new Object();
const myObj = {};
const a = 'string1';
myObj[a] = 'whatever';
alert(myObj.string1);

(提醒“无所谓”)

不能使用变量通过点表示法访问属性,而是使用数组表示法。

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

下面演示了使用(a, b)形式返回键对对象的另一种方法。第一个示例使用字符串'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');

如第二个示例所示,这也可以修改现有对象(如果对象中已经定义了property,则value将被覆盖)。

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

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

var myObj = {[a]: b};