JavaScript数组的行为类似于对象

时间:2018-01-18 07:39:19

标签: javascript arrays object

我想在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"

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

5 个答案:

答案 0 :(得分:6)

因为数组是一个对象

[] instanceof Object
> true

[] instanceof Array
> true

两者都给你真实,因为Array扩展了普通的Object功能。此外,数组按字符串值

索引其所有成员
const array = [];

array[0] = 1;

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

这也是大多数人意想不到的。因此,即使您将数组用作带索引

的普通数组,该数组的行为也类似于Object

答案 1 :(得分: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';

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

所有JavaScript数组也是一个对象

如果你检查x的类型

typeof x

它将打印“对象”

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

这里我们正在创建一个x array

的属性“name”

答案 4 :(得分:0)

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

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

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

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

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

  

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

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