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

标签 javascript object

我正在尝试这样的事情,但这个例子不起作用。

jsObj = {};

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

如何制作这样的动态键?

最佳答案

方括号:

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

在 JavaScript 中,所有数组都是对象,但并非所有对象都是数组。主要区别(并且很难用直接的 JavaScript 和普通对象模仿)是数组实例维护 length 属性,以便它反射(reflect)名称为数字的属性的数值加一,并且其值在转换为数字时是所有此类属性中最大的。这听起来很奇怪,但这只是意味着给定一个数组实例,名称为 "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];

[ ] 运算符在这两种情况下精确地 做同样的事情。换句话说,在一种情况下,所涉及的对象恰好是一个数组这一事实并不重要。

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

myArray[200] = 5;

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

myObj[200] = 5;

没有这样的副作用。数组和对象的名为“200”的属性将被设置为值5,其他方式完全相同。

有人可能会认为,由于 length 行为有点方便,您不妨将 all 对象作为 Array 构造函数的实例而不是普通对象。这并没有直接的错误(尽管它可能会令人困惑,尤其是对于熟悉其他一些语言的人来说,对于某些属性包含在 length 而不是其他属性)。但是,如果您使用 JSON 序列化(相当常见的事情),请了解数组实例以 涉及数字命名属性的方式序列化为 JSON。添加到数组的其他属性将永远不会出现在序列化的 JSON 表单中。比如:

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

var objJSON = JSON.stringify(obj);

"objJSON"的值将是一个仅包含 ["hello world"] 的字符串; "something"属性将会丢失。

ES2015:

如果您能够使用 ES6 JavaScript 功能,您可以使用 Computed Property Names很容易处理这个问题:

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

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

关于javascript - 如何创建要添加到 JavaScript 对象变量的动态键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2462800/

相关文章:

javascript - cordova.addConstructor 的替代品?

javascript - 将输入字段中的字符限制为一组字符

java - python - 构造函数内的另一个类

javascript - 如何将关键路径数组返回到嵌套 javascript 对象中的值?

php - 如何打印一个名为 *(星号)的对象?

javascript - JQuery 在 Opt 组中设置选项

javascript - 使用 angularJS 单击 Internet Explorer 中的输入表单功能

android - 使用按钮android studio移动图像

javascript - PHP 每周更改文本

java - 计算对象的年龄有什么好处?