Как создать свойство объекта из значения переменной в JavaScript?

Я хочу добавить новое свойство в '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'

Другими словами: Как создать свойство объекта и указать ему имя, хранящееся в переменной, но не имя самой переменной?

Ответ 2

ES6 вводит имена вычисляемых свойств, которые позволяют вам выполнять

var myObj = {[a]: b};

Обратите внимание, что поддержка браузера в настоящее время незначительна.

Ответ 3

Точечная нотация и свойства эквивалентны. Итак, вы бы сделали так:

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

(предупреждает "что угодно" )

Ответ 4

Ecu, если вы выполняете myObj.a, тогда он ищет свойство с именем a myObj. Если вы выполняете myObj[a] =b, то он ищет свойство a.valueOf() myObj.

Ответ 5

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);

Чем короче?

Ответ 6

Вы можете просто использовать это:

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

Все, что вы передаете в качестве первого параметра, будет именем свойства, а вторым параметром будет значение свойства.

Ответ 8

Вы не можете использовать переменную для доступа к свойству через точечную нотацию, вместо этого используйте нотацию массива.

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

Ответ 9

Ниже показан альтернативный подход для возврата объекта пары ключей с использованием формы (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');

Как показано во втором примере, это также может изменять существующие объекты (если свойство уже определено в объекте, значение будет перезаписано).

Результат №1: { key: 'val' }

Результат №2: { foo: 'bar', key: 'val' }