求问,const这两种写法为什么会报错?

问题描述

在网上找了const的两种写法,为什么一种报错,而另一种可以成功?

clipboard.png

阅读 5.9k
7 个回答

数组等引用类型变量存储的是地址,上边那种相当于直接改变了该变量的地址指向,就和你直接重新赋值变量是一个概念。所以会报错。
下边那种改变的是数组内的元素,本质上names存储的内存地址并未改变,所以不会报错

MDN的解释:The const declaration creates a read-only reference to a value. It does not mean the value it holds is immutable, just that the variable identifier cannot be reassigned. For instance, in the case where the content is an object, this means the object's contents (e.g., its properties) can be altered.

具体解释就是,变量在编译链接后会被分配到具体的某个内存地址,变量值是该地址存储的内容。用const初始化变量,就是将初始变量值分配到指定内存地址。此时内存地址已经确定不能变,再赋值会将这个变量分配到别的地址,报错;而地址中存储的变量值可以被修改。

const 声明的是常量,常量是不可以被赋值的,即当你 const name = [];的时候,这个name的值就只能是[]了,不可以再被赋值为[1,2,3],如果确实需要常量,那么可以const name = [1, 2, 3]

const声明会阻止对于变量绑定与变量自身值的修改,这意味着const声明并不会阻止对变量成员的修改

第一种 是用一个数组给name赋值,const声明的是常量。

const声明创建一个值的只读引用。但这并不意味着它所持有的值是不可变的,只是变量标识符不能重新分配。例如,在引用内容是对象的情况下,这意味着可以改变对象的内容(例如,其参数)。

新手上路,请多包涵

const是常量啊,只能是声明时候赋值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏