Как создать объект из переменной в 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'

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

9 ответов



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

var myObj = {[a]: b};

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


точечная нотация и свойства эквивалентны. Таким образом, вы бы выполнили так:

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

(оповещения "любой")


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


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

что-нибудь более короткое?


поскольку $scope является объектом, вы можете попробовать с помощью JavaScript:

$scope['something'] = 'hey'

это равно:

$scope.something = 'hey'

Я создал скрипку, чтобы проверить.


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

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

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


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

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

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

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

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