JavaScript数组引用问题:为何赋值后输出原数组而非空数组
为什么执行代码后result仍输出原数组?
咱们一步步拆解代码的执行逻辑,就能搞懂原因:
创建数组并赋值给num:
let num = [1, 2, 3, 4, 5];
这行代码在内存里创建了一个包含[1,2,3,4,5]的数组对象,变量num存储的是指向这个数组的内存引用地址,而非数组本身。复制引用地址给result:
let result = num;
这里只是把num里存的引用地址复制给了result,现在num和result两个变量都指向内存中同一个数组对象。给num重新赋值新数组:
num = [];
这一步是关键:它不是修改原来的数组,而是在内存里新建了一个空数组对象,然后把这个新数组的引用地址赋值给num。此时num的引用地址已经换成新的了,但result依然保留着原来指向[1,2,3,4,5]的引用地址,所以console.log(result)输出的还是原数组。
简单说:你混淆了「修改引用指向的对象」和「替换变量的引用」这两个操作。如果是直接修改原数组(比如num.splice(0)或者num.length = 0),那result也会变成空数组,因为它们指向同一个对象;但这里是给num换了个新的引用目标,和result没关系了。
内容的提问来源于stack exchange,提问作者meruvu likith
相关产品推荐
相关产品推荐

