如何从JavaScript中的variables值创build对象属性?
我想添加一个新的属性给'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'
换句话说:我如何创build一个对象属性,并将其名称存储在variables中,而不是variables本身的名称?
有点符号和括号符号
myObj[a] = b;
ES6引入了计算的属性名称,可以让你做
var myObj = {[a]: b};
注意浏览器支持目前是微不足道的。
点符号和属性是等价的。 所以你会这样做:
var myObj = new Object; var a = 'string1'; myObj[a] = 'whatever'; alert(myObj.string1)
(警告“无论”)
Ecu,如果你做了myObj.a
,那么它会查找名为myObj的属性。 如果你做myObj[a] =b
那么它会查找myObj的a.valueOf()
属性。
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');
作为第一个parameter passing的任何东西都是属性名称,第二个参数是属性值。
由于$ scope是一个对象,所以您可以使用JavaScript来尝试:
$scope['something'] = 'hey'
它等于:
$scope.something = 'hey'
我创build了一个小提琴来testing 。
您不能使用variables通过点符号访问属性,而是使用数组符号。
var obj= { 'name' : 'jroi' }; var a = 'name'; alert(obj.a); //will not work alert(obj[a]); //should work and alert jroi'
以下演示了使用(a, b)
的forms返回密钥对对象的另一种方法。 第一个示例使用string'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' }