我想在'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'
换句话说:如何创建一个对象属性并为其提供存储在变量中的名称,而不是变量本身的名称?
答案 0 :(得分:403)
有the dot notation and the bracket notation
myObj[a] = b;
答案 1 :(得分:283)
ES6引入了计算属性名称,允许您执行
var myObj = {[a]: b};
注意浏览器支持目前可以忽略不计。
答案 2 :(得分:71)
点符号和属性是等价的。所以你会这样完成:
var myObj = new Object;
var a = 'string1';
myObj[a] = 'whatever';
alert(myObj.string1)
(警告“无论什么”)
答案 3 :(得分:9)
Ecu,如果你做myObj.a
,那么它会查找名为a的myObj属性。
如果您执行myObj[a] =b
,则会查找myObj的a.valueOf()
属性。
答案 4 :(得分:7)
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);
还有什么更短的?
答案 5 :(得分:4)
你可以使用它:
function createObject(propName, propValue){
this[propName] = propValue;
}
var myObj1 = new createObject('string1','string2');
作为第一个参数传递的任何内容都是属性名称,第二个参数是属性值。
答案 6 :(得分:3)
由于$ scope是一个对象,您可以尝试使用JavaScript:
$scope['something'] = 'hey'
等于:
$scope.something = 'hey'
答案 7 :(得分:2)
您不能使用变量通过点表示法访问属性,而是使用数组表示法。
var obj= {
'name' : 'jroi'
};
var a = 'name';
alert(obj.a); //will not work
alert(obj[a]); //should work and alert jroi'
答案 8 :(得分:0)
以下演示了使用(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' }