在读犀牛书时JS中稀疏数组部分的一些疑惑

specialCoder
  • 2.1k

图片描述

如上图所示
下面是我的理解:

1.可以给数组元素赋值undefined,此时该数组元素存在,它的值为undefined

2.省略数组直接量的值,该数组元素也存在,默认赋值为undefined

3.使用 var a = new Array(3),申请了内存空间,访问数组元素返回undefined,但是数组中的元素是不存在的

4.

var a = ['first','second'];
a[1001] = ['defined'];

此时a数组的长度是1002,空索引会自动被填充,并赋值undefined

拜托大神帮忙看看我哪里理解的不正确。

回复
阅读 2.4k
3 个回答

我看的时候的理解就是,没有自己显示赋值的,都是不存在的,也就是说是JS自动补充的undefined,而这个表示就是你没有定义它,但是你自己显示的定义undefined,JS就不会再说它是你没有定义的,而是你定义的undefined...,听起来很绕口,但是我这么理解感觉差不多了

图片描述

图片描述

我在chrom控制台测试了一下,显示如上图所示,结果和楼顶回答的一致,没有自己显示赋值的,都是不存在的。而且我还是坚持认为:如果根据性能优化的方面来讲,索引应该不会自动填充,访问2-1000下标的时候返回的是undefined类型而不是undefined值,也就是说这之间的数组元素是不存在的。我估计那个length的更新原理就是max(index)+1

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏