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