You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何数组直接赋值与扩展运算符复制后Chrome控制台输出不同?

控制台显示差异的核心原因

在Ubuntu 22.04.1 LTS(Gnome环境)的Chrome 104.0.5112.101中,执行两段数组赋值代码后出现的控制台显示差异,本质是赋值逻辑不同+Chrome DevTools的显示策略导致的:

两段代码的本质区别

第一段代码(引用赋值):

let arrTest = [1,2,3,4]
let arr = arrTest
console.log(arr)
  • arr只是arrTest的别名,二者指向内存中同一个数组对象,没有创建新的数组实例。

第二段代码(创建新数组):

let arrTest = [1,2,3,4]
let arr = [...arrTest]
console.log(arr)
  • 扩展运算符[...arrTest]会生成一个全新的数组对象,并将原数组的元素浅拷贝到新数组中,arr和arrTest是两个独立的对象。

Chrome DevTools的显示策略

Chrome控制台对数组的显示方式会根据实例的创建来源做区分:

  • 对于直接引用原数组实例(未通过字面量、拷贝等方式生成新实例)的情况,控制台默认显示构造函数式的标识Array(4),需要点击展开才能查看具体元素。
  • 对于通过扩展运算符(等价于数组字面量[1,2,3,4]的创建逻辑)生成的新数组,控制台会直接展示数组的元素内容,同时标注数组长度(4)。

验证方法

你可以在控制台执行以下代码确认:

// 验证第一段代码的对象同一性
let arrTest1 = [1,2,3,4]
let arr1 = arrTest1
console.log(arr1 === arrTest1) // 输出true,说明是同一个对象

// 验证第二段代码的对象独立性
let arrTest2 = [1,2,3,4]
let arr2 = [...arrTest2]
console.log(arr2 === arrTest2) // 输出false,说明是不同对象

// 验证元素内容一致
console.log(arr1.toString()) // 输出"1,2,3,4"
console.log(arr2.toString()) // 输出"1,2,3,4"

内容的提问来源于stack exchange,提问作者WuzerHaun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:12:49