我正在try 类似的方法,但这个例子不起作用.

jsObj = {};

for (var i = 1; i <= 10; i++) {
    jsObj{'key' + i} = 'example ' + 1;
}

我能做什么来制作这样的动态键?

推荐答案

方括号:

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

在JavaScript中,所有数组都是对象,但并非所有对象都是array.主要区别(也是很难用普通JavaScript和纯对象模拟的)是数组实例维护length属性,以便它反映名称为数字的属性的数值加1,并且其值在转换为数字时是所有此类属性中最大的.这听起来真的很奇怪,但这只是意味着给定一个数组实例,名称为"0""5""207"等的属性都被特殊对待,因为它们的存在决定了值length.最重要的是,length的值可以是setremove个这样的属性.将数组的length设置为0实际上会删除名称看起来像整数的所有属性.

这就是数组的特殊之处.然而,所有这些都与JavaScript [ ]操作符的工作方式无关.该操作符是一种对象属性访问机制,可用于任何对象.在这方面需要注意的是,就简单的属性访问而言,数字数组属性名并不特殊.它们只是碰巧看起来像数字的字符串,但JavaScript对象属性名称可以是任何类型的字符串.

因此,在数组for中迭代运算符:

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

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

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

[ ]号操作员在这两种情况下都在做同样的事情.换句话说,在一种情况下,所涉及的对象恰好是一个数组这一事实并不重要.

setting属性值使用[ ]时,对于维护length属性的特殊行为,故事与except相同.如果在数组实例上使用数字键设置属性:

myArray[200] = 5;

然后(假设"200"是最大的数字属性名称),作为属性分配的副作用,length属性将更新为201.但是,如果对普通对象执行相同的操作:

myObj[200] = 5;

没有这种副作用.数组和对象的名为"200"的属性将以完全相同的方式设置为值5.

有人可能会认为,因为这length个行为很方便,所以您还可以使all个对象实例成为Array构造函数的实例,而不是普通对象.这并没有什么直接的错误(尽管有些属性包含在length个属性中,而不包括其他属性,这可能会让人感到困惑,特别是对于熟悉其他一些语言的人来说).但是,如果您正在使用JSON序列化(这是相当常见的事情),请理解数组实例是以only涉及数字命名属性的方式序列化为JSON的.添加到数组中的其他属性永远不会出现在序列化的JSON表单中.例如:

var obj = [];
obj[0] = "hello world";
obj["something"] = 5000;

var objJSON = JSON.stringify(obj);

"objJSON"的值将是一个只包含["hello world"]的字符串;"某物"的财产将丢失.

ES2015:

如果您能够使用ES6 JavaScript特性,则可以使用Computed Property Names非常轻松地处理此问题:

var key = 'DYNAMIC_KEY',
    obj = {
        [key]: 'ES6!'
    };

console.log(obj);
// > { 'DYNAMIC_KEY': 'ES6!' }

Javascript相关问答推荐

当没有固定间隔时,是否可以在d3.js中进行画笔捕捉?

将下拉分区与工具提示结合起来

在JavaScript中检索一些文本

我不知道为什么我的JavaScript没有验证我的表单

在贝塞尔曲线的直线上找不到交叉点:(使用@Pomax的bezier.js)

我在这个黑暗模式按钮上做错了什么?

我试图实现用户验证的reduxstore 和操作中出了什么问题?

窗口.getComputedStyle()在MutationObserver中不起作用

MongoDB中的引用

如何为我的astro页面中的相同组件自动创建不同的内容?

v—自动完成不显示 Select 列表中的所有项目

如何调用名称在字符串中的实例方法?

我的角模板订阅后不刷新'

我可以使用空手道用户界面来获取网页的当前滚动位置吗?

基于props 类型的不同props ,根据来自接口的值扩展类型

400 bad request error posting through node-fetch

MarkLogic-earch.suggest不返回任何值

触发异步函数后不能显示数据

OnClick更改Json数组JSX中的图像源

如何组合Multer上传?