weijiyang / GOOD-IDEA

这里记录一些灵感~详见ISSUES
1 stars 0 forks source link

类数组 push splice length规则 #60

Open weijiyang opened 4 years ago

weijiyang commented 4 years ago
  1. call push这个方法如果对象有length属性,length属性会加1 并且返回,这个是在某本书的上看到的,一直记得。

push方法将值追加到数组中。

push 方法有意具有通用性。该方法和 call() 或 apply() 一起使用时,可应用在类似数组的对象。push 方法根据 length 属性来决定从哪里开始插入给定的值。如果 length 不能被转成一个数值,则插入的元素索引为 0,包括 length 不存在时。当 length 不存在时,将会创建它。

唯一的原生类数组(array-like)对象是 Strings,尽管如此,它们并不适用该方法,因为字符串是不可改变的。

  1. 调用push方法的时候会在调用对象的key=length的地方做一个赋值,不管前面key有没有值,也就是说在调用push的时候 对象实际被理解为了[0:undefined,1:undefined,2:3,3:4], 这样也就有了结果里面的 key===2 value =1 key===3 value =2
  2. 额外的 这个对象如果有push和splice会输出会转换为数组,下图为去掉splice image

包含splice方法 image

push每次调用都会给length+1 而会对对应arr[length]进行复制 如下图

image

weijiyang commented 4 years ago

image

当只有length splice同时存在的时候对象才会转换为伪数组 当使用push的时候 如果没有length 会生成length属性赋值1 (如果有splice变成伪数组) 有length会+1 并对 arr[length] 进行 赋值