Ответ 1
Там точечная нотация и обозначение скобки
myObj[a] = b;
Я хочу добавить новое свойство в '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'
Другими словами: Как создать свойство объекта и указать ему имя, хранящееся в переменной, но не имя самой переменной?
Там точечная нотация и обозначение скобки
myObj[a] = b;
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);
Чем короче?
Вы можете просто использовать это:
function createObject(propName, propValue){
this[propName] = propValue;
}
var myObj1 = new createObject('string1','string2');
Все, что вы передаете в качестве первого параметра, будет именем свойства, а вторым параметром будет значение свойства.
Поскольку $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' }