js 数组中的元素为empty该怎么理解

origin_master
  • 98

js 数组中的元素为empty该怎么理解

相关代码

const obj = {0: 1, 1: 2, 3: 5, length: 4, [Symbol.isConcatSpreadable]: true}
[].concat.call(obj, [5,6])   // [1, 2, empty, 5, 5, 6]

arr1 = new Array(3)   //  [empty × 3]
回复
阅读 1.1k
3 个回答

这些empty是那些对应index没有实际值的元素,javascript内部做了优化,如果这种元素的数量大于一定的阈值就会把传统数组的数据结构变为hashtable,以优化内存占用,不管他它究竟是什么值都不要紧,他最终还是一种优化手段
比如以下代码就相当于

a = []
a[1e6] = 6
a = new Map()
a.set(1e6,6)

相关文章
从V8引擎来看JS中这个"假数组"

empty表示空位,可以将他理解为数组中的孔,它不是一种数据类型,是由于人为修改arr.length 或者写入时多写了逗号造成的,所以使用indexOf(undefined)找不到它。使用slice会复制孔,forEach、every会跳过孔,不对孔调用回调函数,map不对孔调用回调函数,但是孔会保留,filter不对孔调用回调函数,但是孔会被过滤掉,所以需要使用for遍历,而他的值等同于undefined,就像是从对象上取值他不存在的属性一样

就是 undefined

宣传栏