如何从 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 = b
与 myObj[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>中的变量值,要如何做?