今天小伙伴问了我你知道js字典操作吗?
我是一脸懵逼的,那是什么?遂上网搜,看到答案只想说原来如此。。。所以还是记下来吧
首先,js的数组 Array 既是一个数组,也是一个字典。
数组用法
|
|
关联数组(类似字典)用法
|
|
这里的 i 即为字典的每个键值。
此外,dictionary是一个字典对象,而它的每个键值就是一个属性。也就是说 d1 是 dictionary 的一个属性。但是这样子创建出来的 dictionary 是不会像普通数组那样有 length
属性的
再来看一下字典和数组的简化声明方式
|
|
在上例中,d1和d2既是键值,也是作为字典对象的属性
下面再来看看如何对一个对象的属性进行遍历。(for…in)
|
|
上面的这种用法可以用来查看一个对象都有哪些属性。当你已经知道Computer对象有一个brand属性时,就可以用
|
|
总结:Javascript中的数组也可以用来做字典。字典的键值也是字典对象的属性。对一个对象的属性进行遍历时,可以用for in。
数组遍历与属性
虽然在 JavaScript 中数组是对象,但是没有好的理由去使用 for in 循环 遍历数组。
相反,有一些好的理由不去使用 for in 遍历数组。
注意:JavaScript中数组不是关联数组
JavaScript 中只有对象来管理键值的对应关系。但是关联数组是保持顺序的,而对象不是。
由于 for in 循环会枚举原型链上的所有属性,唯一过滤这些属性的方式是使用
hasOwnProperty
函数,因此会比普通的 for 循环慢上好多倍。
为了达到遍历数组的最佳性能,推荐使用经典的 for 循环。
|
|
上面代码有一个处理,就是通过 l = list.length 来缓存数组的长度。
虽然 length 是数组的一个属性,但是在每次循环中访问它还是有性能开销。
实际上,不使用缓存数组长度的方式比缓存版本要慢很多。