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

Posted

技术标签:

【中文标题】如何从 JavaScript 中的变量值创建对象属性? [复制]【英文标题】:How to create an object property from a variable value in JavaScript? [duplicate] 【发布时间】:2011-01-15 13:26:10 【问题描述】:

我想向“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'

换句话说:我如何创建一个对象属性并赋予它存储在变量中的名称,而不是变量本身的名称?

【问题讨论】:

@Bergi,这个问题和答案不是重复的!另一个是 JQuery,这个是 vanilla js @daniella 对象属性绝对是纯 javascript。在 jQuery 示例中使用它是无关紧要的。 为了记录,永远不要使用new Object;改用对象文字:var myObj = 【参考方案1】:

有the dot notation and the bracket notation

myObj[a] = b;

【讨论】:

它们并不是真正的“等价物”; myObj.a = bmyObj[a] = b 的含义不同(除非 a == 'a'),但无论如何……这就是你想要的。 我的意思是它们是设置属性的等效方法。显然它们的行为不同(因此发布此答案的目的)-但它们具有相同的结果。 philfreo:除了他们有相同的结果,这是这个问题的基础。 我只是说有两种方法可以设置对象,一种用于硬编码键,另一种用于可变键。我的意思是无论您使用myObj['foo'] = 'bar' 还是myObj.foo = 'bar',对象的结果都是相同的 不知何故这个方法给了我一个数组[a:b]而不是a:b【参考方案2】:

ES6 引入了计算属性名,让你可以这样做

var myObj = [a]: b;

注意浏览器支持目前可以忽略不计。

【讨论】:

与 Babel 一起使用。 对于像我这样使用 Node.js 开发并且只需要它作为后端的人,因此不用担心浏览器的实现,这非常有用。应该有更多的赞成票! 这实际上看起来像是创建以变量为键的匿名对象的唯一方法,当您只需要将其推送到数组时非常有用。 目前支持哪些浏览器? @Jessica kangax.github.io/compat-table/es6/…【参考方案3】:

点符号和属性是等价的。所以你会这样完成:

var myObj = new Object;
var a = 'string1';
myObj[a] = 'whatever';
alert(myObj.string1)

(警告“随便”)

【讨论】:

【参考方案4】:

Ecu,如果您执行myObj.a,那么它会查找名为 a 的 myObj 的属性。 如果您执行myObj[a] =b,那么它会查找myObj 的a.valueOf() 属性。

【讨论】:

【参考方案5】:

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);

还有更短的吗?

【讨论】:

我不确定你是否可以把它算作单行,因为里面的函数有三个语句,而不是一个(这通常是单行的要求)。跨度> en.wikipedia.org/wiki/One-liner_program 我喜欢第二个 sn-p 的优雅。这是有道理的,因为 var 做了两个动作,第一个动作是将变量“定义”为未定义。 虽然不太可读。【参考方案6】:

你可以用这个:

function createObject(propName, propValue)
    this[propName] = propValue;

var myObj1 = new createObject('string1','string2');

您作为第一个参数传递的任何内容都是属性名称,第二个参数是属性值。

【讨论】:

【参考方案7】:

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

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

【讨论】:

【参考方案8】:

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

$scope['something'] = 'hey'

等于:

$scope.something = 'hey'

I created a fiddle to test.

【讨论】:

【参考方案9】:

下面演示了一种使用(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'

【讨论】:

以上是关于如何从 JavaScript 中的变量值创建对象属性? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将过程中的变量值传递给 Apex 中的 Javascript 函数

javascript 我想在body中设置一个标签显示<script>中的变量值,要如何做?

如何更改内部类中的变量值[closed]

php怎么获取当前页面 javascript的变量值

JavaScript,当变量作为参数传递时更改函数内部的变量值[重复]

python - 如何将一个类方法中的变量值用于python中的另一个类[关闭]