如何从 JavaScript 中的变量值创建对象属性?

IT技术 javascript properties object
2021-01-13 09:32:06

我想向“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'

换句话说:如何创建对象属性并为其指定存储在变量中的名称,而不是变量本身的名称?

6个回答

还有点符号和括号标记

myObj[a] = b;
philfreo:除了他们没有相同的结果,这是这个问题的基础。
2021-03-10 09:32:06
它们并不是真正的“等效”;myObj.a = b意味着与myObj[a] = b(除非a == 'a'不同的东西,但无论如何......这就是你想要的。
2021-03-11 09:32:06
不知何故,这种方法给了我一个数组[a:b]而不是{a:b}
2021-03-12 09:32:06
我的意思是它们是设置属性的等效方法。显然,它们的行为不同(因此发布此答案的目的)-但它们具有相同的结果。
2021-03-28 09:32:06
我只是说有两种设置对象的方法,一种用于密钥是硬编码的,另一种用于可变的。我的意思是对象的结果是等效的,无论您使用myObj['foo'] = 'bar'myObj.foo = 'bar'
2021-04-07 09:32:06

ES6 引入了计算属性名称,它允许你做

var myObj = {[a]: b};

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

不过可以与 Babel 一起使用。
2021-03-15 09:32:06
这实际上看起来像是创建以变量为键的匿名对象的唯一方法,当您只需要将其推送到数组时非常有用。
2021-03-16 09:32:06
2021-03-16 09:32:06
对于像我这样使用 Node.js 开发并且只需要它作为后端的人,因此不用担心浏览器的实现,这非常有用。应该多点赞!
2021-03-18 09:32:06
目前支持哪些浏览器?
2021-03-29 09:32:06

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

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

(提醒“随便”)

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

单线:

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

或者:

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

有更短的吗?

我不确定您是否可以将其视为单行,因为里面的函数有三个语句,而不是一个(这通常是单行的要求)。
2021-03-13 09:32:06
我喜欢第二个片段的优雅。这是有道理的,因为 var 执行两个操作,第一个操作是它将变量“定义”为未定义。
2021-03-24 09:32:06
虽然不是很可读。
2021-04-07 09:32:06