Javascript const 用于原始 vs 对象的幕后工作?

问题描述

我遇到了一个有趣的概念,其中 const 对于 numberstringBooleanObjectarrays 的行为不同。>

const num1 = 10
num1 = 20 //throws error

const arr1 = [1,2,3,4]
arr1.push(5) //works
arr1.pop() //works
arr1[2] = 7 //works

arr1 = [2,3] //throws error

对于 arrayobjects,它允许更改值,但会在赋值中引发错误。是否意味着将 objectarray 声明为 const 没有任何优势,因为您可以随时更改所有值?

如果有人能解释一下,我想知道,const 在幕后是如何工作的?

解决方法

const 声明创建一个对值的只读引用。 它所持有的价值仍然是不可变的。数组和对象都持有一些值。这些值和属性可以更改,但不能重新分配相同的变量标识符。

这里的 arr1 是一个变量标识符

const arr1 = [1,2,3,4]
arr1.push(5) //works // changing the value
arr1.pop() //works //changing the value
arr1[2] = 7 //works // changing the value

这里 arr1 被重新分配所以它抛出一个错误

 arr1 = [2,3] //throws error // reassigning the same variable