JavaScript
中数组空位指的是数组中的empty
,其表示的是在该位置没有任何值,而且empty
是区别于undefined
的,同样empty
也不属于Js
的任何数据类型,并且在JavaScript
版本以及各种方法对于空位的处理也有不同,所以建议避免在数组中出现空位。
在JavaScript
的数组是以稀疏数组的形式存在的,所以当在某些位置没有值时,就需要使用某个值去填充。当然对于稀疏数组在各种浏览器中会存在优化的操作,例如在V8
引擎中就存在快数组与慢数组的转化,此外在V8
中对于empty
的描述是一个空对象的引用。在Js
中使用Array
构造器创建出的存在空位的问题,默认并不会以undefined
填充,而是以empty
作为值,需要注意的是,空位并不是undefined
,undefined
表示的是没有定义,但是本身undefined
就是一个基本数据类型,是一个值,而是empty
表示了该处没有任何值,是一个完全为空的位置。
ECMA262V5
中对空位的处理就已经开始不一致了,在大多数情况下会忽略空位,例如forEach()
、for in
、filter()
、every()
和some()
都会跳过空位,map()
会跳过空位,但会保留这个值,join()
和toString()
会将空位与undefined
以及null
处理成空字符串。
ECMA262V6
则是将空位转为undefined
,例如Array.form()
方法会将数组的空位转为undefined
,扩展运算符也会将空位转为undefined
,copyWithin()
会连同空位一起拷贝,for of
循环也会遍历空位并将值作为undefined
,includes()
、entries()
、keys()
、values()
、find()
和findIndex()
等会将空位处理成undefined
。