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

JavaScript中const声明数组:可变性与重新赋值的概念疑问

搞懂JavaScript中const、数组可变性与重新赋值的区别

嘿,这个问题其实是JavaScript里const关键字最容易让人懵的点之一,我来给你理清楚~

首先得明确**const的核心规则**:用const声明的变量,它的引用(也就是指向的内存地址)是不可变的,但它指向的「值」如果是引用类型(比如数组、对象),这个值本身的内容是可以修改的。

咱们结合你的代码来看:

为什么修改数组元素没问题?

你写的:

const cars = ["Saab", "Volvo", "BMW"];
cars[0] = "Toyota";
cars[1] = "Honda";
cars[2] = "Hyundai";

这里cars变量一直指向的是最初创建的那个数组对象,你只是在修改这个数组内部的元素——就像你有一个抽屉,你只是把抽屉里的东西换掉,抽屉本身还是原来那个,所以const不会阻止这种操作。

为什么直接重新赋值整个数组会报错?

而当你写:

cars = ["Toyota" , "Honda" , "Hyundai"];

这时候你其实是在让cars变量指向一个全新的数组对象,相当于把原来的抽屉换成了另一个新抽屉——这就改变了cars变量的引用,而const的规则就是不允许修改变量的引用,所以浏览器会抛出错误。

怎么解决?

如果你确实需要给变量重新赋值整个数组,那应该用let来声明变量:

let cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota" , "Honda" , "Hyundai"]; // 这时候就完全没问题了

简单总结一下:

  • const锁的是「变量的引用」,不是「引用指向的内容」
  • 数组/对象的可变性是指它们内部的内容可以修改,和const的规则不冲突
  • 重新赋值变量指向新对象,只有let/var允许,const不行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:52:46