JavaScript 对一个数组进行长度赋值0引起的问题?

const a =[1,2,3];
const b =a[1];
a.length =0;
console.log(a)
console.log(b)

chrome 控制台输出
image.png

问题:
arr.length=0 不就是清空数组的操作吗?
为什么会出现这样的情况呢?

阅读 723
4 个回答

b的值是个number2,所以清不清A都跟他没关系了 跟直接写b=2一样的

你先给b赋值,你清空a ;和b有什么关系

这是引用类型和基本类型的内存问题
保存引用类型只是保存它的指针
保存基本类型则是新开辟一个空间存储
所以你上面的b = a[0]
也就是b保存了number,并没有保存引用类型
所以b是新开辟了一个空间进行存储,此时清除a,跟b是没有关系的

let a = [5,6,7]
let b = a[0]
console.log(typeof b, typeof a[0])  // number, number

如果你直接b = a那么复制的是引用指针,他们指向同一个内存,所以会产生联动影响

let c = [5,6,7]
let d = c
c.length = 0
console.log(c,d) // [] []

image.png
我猜你以为你敲的是这样的顺序 结果拿到了上面的效果 所以才问出这个问题

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