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

В чем разница между JavaScript и Java? — Переполнение стека

var myObj = new Object;
var a = 'string1';
var b = 'string2';
myObj.a = b;

alert(myObj.string1); //Returns 'undefined'
alert(myObj.a); //Returns 'string2'

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

помечено , таких как Bergi javascript пользователей с javascript , который можно в одиночку закрыть вопросов в виде дубликатов и повторно открывайте их по мере необходимости. 18 августа ’15 в 23:39

Этот вопрос был заданный ранее и уже имеет ответ. Если эти ответы не полностью отвечают на ваш вопрос, пожалуйста, задать новый вопрос Глядя на вывод

ES6 вводит имена вычисляемых свойств, которые позволяют вам делать { *} С точки зрения машины, хотя это крайне неэффективно и замедлит работу нашего приложения, если мы создадим слишком много наблюдателей. Миско привел цифру в 4000 зрителей, прежде чем ваше приложение будет работать медленнее в старых браузерах.

var myObj = {[a]: b};

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

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

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

(предупреждение s «что угодно»)

Ecu, если вы делаете { *} После выполнения строки выше, вы, вероятно, увидите кучу тарабарщины. Сделайте следующее: myObj.a, тогда он ищет свойство с именем a of myObj. Если вы делаете свойство myObj[a] =b. Проблема, с которой я столкнулся (которую я удивлен, что я не видел обсуждаемой) заключается в уловке наложения предыдущих элементов с отступами или прозрачной рамкой, предотвращающей действия при наведении и щелчке внизу. из этих разделов, потому что следующий идет выше в z-порядке. 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);

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

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

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

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

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

$scope['something'] = 'hey'

Это равно:

$scope.something = 'hey'

Я создал скрипку для проверки Глядя на вывод

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

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' }