JavaScript数组的行为类似于对象

问题描述 投票:1回答:5

我试图在JavaScript中理解一些东西。

让我们说我做了以下事情:

   let x = [];
   x['Monday'] = 'Work';
   x['Tuesday'] = 'More Work';

   console.log(x) //[Monday: "Work", Tuesday: "More Work"]
   console.log(x.Monday) //"Work"
   console.log(x.Tuesday) //"More Work"

有人可以帮助解释为什么数组现在表现得像一个对象?

javascript arrays object
5个回答
6
投票

因为数组是一个对象

[] instanceof Object
> true

[] instanceof Array
> true

两者都给你真实,因为Array扩展了普通的Object功能。此外,数组通过字符串值索引其所有成员

const array = [];

array[0] = 1;

array['0'] // will give you 1

这也是大多数人意想不到的。因此,即使您将数组用作带索引的普通数组,该数组的行为也类似于Object


0
投票

JS中的所有内容都是一个对象,除了Primitive types(甚至包含Object包装器的那些)

这就是为什么你可以像访问任何其他对象一样访问array.length array.indexOf()等属性和方法。索引就像数组对象上的特殊属性iterable


0
投票

所有JavaScript数组也是一个对象

如果你检查x的类型

typeof x

它会打印“对象”

var x =[];
x.name = "X";

这里我们正在创建x数组的属性“名称”


0
投票

因为在javascript中没有真正的Array类型作为低级类型。 Array类只是一种从Object类扩展而来的类。

  • javascript中的每个类除了NumberString等基元之外。从Object课程延伸。
  • 每个对象(类的实例)都可以具有属性和方法。
  • 每个类的实例都可以在运行时具有新的属性和方法,并且可以修改或删除此属性。

通过这样做。

var ar = [] // I used array literal. Not totally same but similar of doing new Array();
arr['foo'] = 'bar';

您只是向对象添加新属性。


0
投票

我想你现在已经听说过Array是一种Object,所以我不会再打败那匹死马了。好吧也许一点点。

这意味着您可以使用“星期一”和“星期二”等名称来判断和设置属性。因为它是一种Object,所以这没有问题(像a[‘1’]这样的语句隐含地将该字符串'1'转换为数字1)。但是不要将此属性名称误认为是数组索引,那些是特定的整数**。那有什么重要性?

数组有一个很好的行为,当你使用实际的数组索引时,length属性会自动为你更新。更不用说数组索引访问通常由JVM实现优化,明显快于常规属性访问。

另外,让我们不要忘记拥有Arrays的其他巨大好处之一,它们继承自Array.prototype,它有很多有用的方法:)!

因此,简而言之,使用阵列之类的阵列 - 获得性能提升,同时确保代码更易于理解。

来源:JS权威指南第6版 - 数组章节

(**非负且小于2 ^ 32-2,因为数组具有32位大小索引。)

© www.soinside.com 2019 - 2024. All rights reserved.