如何从JavaScript中的变量值创建对象属性?[重复]

2020/09/30 14:21 · javascript ·  · 0评论

我想为“ 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,则它将查找名为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');

您通过的第一个参数将是属性名称,第二个参数将是属性值。

您不能使用变量通过点表示法访问属性,而应使用数组表示法。

var obj= {
     'name' : 'jroi'
};
var a = 'name';
alert(obj.a); //will not work
alert(obj[a]); //should work and alert jroi'

由于$ scope是一个对象,因此可以通过以下方式尝试使用JavaScript:

$scope['something'] = 'hey'

它等于:

$scope.something = 'hey'

我制造了一个小提琴来测试

以下内容演示了使用形式返回键对对象的另一种方法(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' }

本文地址:http://javascript.askforanswer.com/ruhecongjavascriptzhongdebianliangzhichuangjianduixiangshuxingzhongfu.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!