Discuss / JavaScript / .slice复制

.slice复制

Topic source

左左若木

#1 Created at ... [Delete] [Delete and Lock User]
aCopy === arr; // false

这个为什么是Flase呢?

champkeh

#2 Created at ... [Delete] [Delete and Lock User]

因为数组是引用类型,如果直接像这样aCopy = arr; 把arr赋值给aCopy的话,它们实际上是指向同一个数组对象,此时aCopy === arr;会返回true,因为这时候,堆上只有一个对象,而aCopy和arr同时指向这个唯一的对象

而使用aCopy = arr.slice();这样的语句,则是把arr数组对象复制一份,然后让aCopy指向这个新对象,此时aCopy和arr指向的数组对象除了含有相同的元素外,就没有任何关系了。此时堆上有两个数组对象,它们的内容相同。aCopy和arr分别指向这两个对象

此时比较aCopy和arr的相等性,返回false,因为它们指向的是不同的对象(虽然对象的内容相同)


  • 1

Reply