我创建了一个数组-const cars = ["Saab", "Volvo", "BMW"];
现在,如果我尝试在特定索引处重新分配值,则其工作方式类似于-cars[0] = "Toyota"; cars[1] = "Honda"; cars[2] = "Hyundai";
但是,当我尝试像cars = ["Toyota" , "Honda" , "Hyundai"]
那样一次重新分配它时,会引发错误。在这里,我无法理解可变性与重新分配的概念。
const str = 'abcd';
str = 'changed'; //error
const list = [1,2,3]; // Assume this array is created on memory loc 0x001 (imaginary)
list[0] = 200; // no error here the memory location remains constant but the content changes.
list = [6,4,2]; // error Here new assignment hence memory location changes so error
数组或对象是按位置映射的,而不是与字符串/数字相比的值。
关键字const有点误导。它没有定义常数。它定义了对值的常量引用。因此,我们不能更改常量原始值,但是可以更改常量对象的属性。
更多:https://www.w3schools.com/js/js_const.asp
一旦声明为const,它只能指向该特定数据,则可以更改此数据中的内容,但不能告诉它指向其他位置。
当您将变量声明为const时,它将在内存中分配一个位置,并说:“您只能在此处查找数据!”它不会说“这是您唯一可以读取的数据”,因此您可以在该位置更改数据,但不能提供全新的数据集,因为这将存在于内存中的其他位置。
[当您分配给变量cars
时,您基本上是在尝试更改它的引用,而该引用违反了const
,但是当您尝试修改cars[0]='some value'
中的值(例如cars
)时,它的引用仍然是相同的,值已更改,您需要了解对象cars
的引用仍然保持不变。