栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何创建要添加到JavaScript对象变量的动态键

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何创建要添加到JavaScript对象变量的动态键

方括号:

jsObj['key' + i] = 'example' + 1;

在Javascript中,所有数组都是对象,但并非所有对象都是数组。主要区别(而且很难用直接的Javascript和普通对象来模仿)数组实例维护该

length
属性,以便它反映一个加属性名称的数字值,该属性的名称是数字,并且在转换为数字时其值,是所有此类属性中最大的。这听起来很奇怪,但它只是意味着给定一个数组实例,有相似的名字属性
"0"
"5"
"207"
,等等,都在他们的存在决定的价值被特殊处理
length
。而且,最重要的是,
length
可以
设置 的值以 删除 此类属性。将
length
数组的设置为
0
有效地删除名称看起来像整数的所有属性。

好的,这就是使数组特别的原因。但是,所有这些与Javascript

[]
运算符的工作方式完全无关。该运算符是对任何对象都起作用的对象属性访问机制。在这方面要特别注意的是,就简单属性访问而言,数字数组属性名称并不特殊。它们只是碰巧看起来像数字的字符串,但是Javascript对象属性名称可以是您喜欢的任何类型的字符串。

因此,

[ ]
运算符在
for
循环遍历数组的循环中的工作方式:

for (var i = 0; i < myArray.length; ++i) {  var value = myArray[i]; // property access  // ...}

确实与

[ ]
访问名称为某些计算字符串的属性时的工作方式没有什么不同:

var value = jsObj["key" + i];

两种情况下,

[ ]
那里的操作员都在做 完全相同 的事情。换句话说,在某种情况下,所涉及的对象恰好是一个数组这一事实并不重要。

使用 设置 属性值时

[ ]
除了 维护
length
属性的特殊行为 ,故事是相同的。如果在数组实例上使用数字键设置属性:

myArray[200] = 5;

然后(假设“ 200”是最大的数字属性名称),该

length
属性将被更新
201
为该属性分配的副作用。但是,如果对普通对象执行相同的操作:

myObj[200] = 5;

没有这种副作用。数组和对象的称为“ 200”的属性将以

5
完全相同的方式设置为该值。

可能有人认为,因为这种

length
行为很方便,所以您最好使Array构造函数的 所有
对象实例代替普通对象。这没有什么直接的错误(尽管可能会造成混淆,特别是对于那些熟悉某些其他语言的人来说,某些属性包含在,
length
但其他属性中没有)。但是,如果您正在使用JSON序列化(这是很常见的事情),请了解将数组实例序列化为JSON的方式
涉及数字命名的属性。添加到数组的其他属性将永远不会以序列化的JSON形式出现。因此,例如:

var obj = [];obj[0] = "hello world";obj["something"] = 5000;var objJSON = JSON.stringify(obj);

“ objJSON”的值将是一个包含just的字符串

["hello world"]
;“东西”财产将丢失。

ES2015:

如果您能够使用ES6 Javascript功能,则可以使用计算属性名称轻松处理此问题:

var key = 'DYNAMIC_KEY',    obj = {        [key]: 'ES6!'    };console.log(obj);// > { 'DYNAMIC_KEY': 'ES6!' }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402578.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号