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 不就是清空数组的操作吗?
为什么会出现这样的情况呢?

阅读 726
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
我猜你以为你敲的是这样的顺序 结果拿到了上面的效果 所以才问出这个问题

推荐问题
宣传栏