在javascript对象初始化中使用数字作为属性有什么好处?

时间:2015-11-05 17:59:37

标签: javascript

我正在学习javascript,在阅读了有关如何初始化对象的教程后,我发现了以下示例:

var obj = {  property_1: value_1,   // property_# may be an identifier...
                      2: value_2,   // or a number...
                                    // ...,
           "property n": value_n }; // or a string

我怀疑在这个属性中有一个数字作为名称。我理解这一点,但我找不到使用它的真正好处。我读了this question,从我的观点来看,这种表示法可能导致我的代码设计错误或不必要的复杂性,所以我想知道为什么存在这种语法。

经常使用这种声明吗?在什么样的情况下,这可能是一个理想的替代方案?

3 个答案:

答案 0 :(得分:1)

阵列

JavaScript数组是一些键是整数(*)的对象。

[9, 8, 7]类似于对象{ 0: 9, 1: 8, 2: 7 }

主要区别在于数组的原型为Array.prototype而不是Object.prototype

(*)正如Benjamin Gruenbaum所指出的,数组键对UInt32是可强制的。对象的键始终是字符串或符号。正如djechlin指出的那样,允许数组具有任何类型的键的属性,但我不建议在数组上添加自己的非整数键。

参数

在任何函数(*)中都可以使用名为arguments的类似数组的对象。函数接收的每个参数都是arguments上的属性,具有类似整数的键。

在以下代码中,example调用返回类似{ 0: 9, 1: 8, 2: 7, length: 3 }的对象。

function example(a, b, c) {
    return arguments;
}
example(9, 8, 7);

(*)In modern JavaScript, there is no arguments object in arrow functions.

答案 1 :(得分:1)

在创建稀疏数组和矩阵时使用整数作为对象键非常有用,例如将1000个元素向量与除第10个元素之外的所有位置映射为

v = {10: 1}

这里不能使用JS数组,因为您需要能够使用键指定元素位置。

在ECMAscript 6中使用[Map] 1更好,因为它实际上是一个映射,但在基于旧ES标准的代码库中,您可能仍会看到对象用于这样的映射

答案 2 :(得分:0)

该代码旨在说明问题。但是,既然你问了一个可以使用它的例子,让我给你一些。

  • 如果您收到JSON格式的数据,就会发生这种情况 这个。取决于外部系统的细节。

  • 另一个可能是为了保持一致性。例如。假设你有一个数据模型 从中生成HTML。可能是用途 每个字段的可能值的对象(假设字段 只能取一个可能的值之一)。这些领域 然后可以呈现为单选按钮或选择。一些 这些字段将使用字符串作为可能的值,因此自然 事情是tyo使可能的值列表成为一个对象。但一些 将使用整数键 - 仍然可能更好地坚持列表 永远是一个对象。

E.g。

var prio_field_pos_vals = {
  0: 'Show Stopper',
  1: 'Urgent',
  2: 'High',
  3: 'Low' 
}

当然,这可能不会被定义为独立变量,而是作为模型的一部分,但你明白了。我会避免对象的整数键(以及字符串中带空格的键),除非你有理由,但是当你有理由时,使用它们。