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

What's the benefit of using numbers as properties in a javascript object initialization?

本文关键字:属性 什么 数字 对象 javascript 初始化      更新时间:2023-09-26

我正在学习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

我的疑问在于带有数字作为名称的财产。我理解这一点,但我找不到使用它的真正好处。我读了这个问题,从我的角度来看,这种符号可能会导致我的代码设计不佳或不必要的复杂性,所以我想知道为什么存在这种语法。

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

数组

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);

(*(在现代JavaScript中,箭头函数中没有arguments对象。

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

v = {10: 1}

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

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

该代码是为了说明这一点而人为的。 但是,既然你要求一个可以使用它的例子,让我给你几个。

    如果您
  • 收到 JSON 格式的数据,可能会像这。取决于外部系统的详细信息。

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

例如

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

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