ecu*_*ecu 326 javascript properties object
我想为'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'
Run Code Online (Sandbox Code Playgroud)
换句话说:如何创建一个对象属性并为其赋予存储在变量中的名称,而不是变量本身的名称?
phi*_*reo 426
还有点符号和括号标记
myObj[a] = b;
Run Code Online (Sandbox Code Playgroud)
Ori*_*iol 326
ES6引入了计算属性名称,允许您这样做
var myObj = {[a]: b};
Run Code Online (Sandbox Code Playgroud)
注意浏览器支持目前可以忽略不计.
cgp*_*cgp 75
点符号和属性是等价的.所以你会这样完成:
var myObj = new Object;
var a = 'string1';
myObj[a] = 'whatever';
alert(myObj.string1)
Run Code Online (Sandbox Code Playgroud)
(警告"无论什么")
Oneliner:
obj = (function(attr, val){ var a = {}; a[attr]=val; return a; })('hash', 5);
Run Code Online (Sandbox Code Playgroud)
要么:
attr = 'hash';
val = 5;
var obj = (obj={}, obj[attr]=val, obj);
Run Code Online (Sandbox Code Playgroud)
还有什么更短的?
你可以用这个:
function createObject(propName, propValue){
this[propName] = propValue;
}
var myObj1 = new createObject('string1','string2');
Run Code Online (Sandbox Code Playgroud)
作为第一个参数传递的任何内容都将是属性名称,第二个参数是属性值。
您不能使用变量通过点表示法访问属性,而是使用数组表示法。
var obj= {
'name' : 'jroi'
};
var a = 'name';
alert(obj.a); //will not work
alert(obj[a]); //should work and alert jroi'
Run Code Online (Sandbox Code Playgroud)