我想在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"
有人可以帮助解释为什么数组现在表现得像对象吗?
答案 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
类扩展而来的类。
Number
,String
等原语之外。从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位大小的索引。)