如果我没有错,variable
名称所使用的指针在内存中不会改变,但变量points
可能会改变。
let name = "google";
const foo = name;
console.log(foo); //prints google
name = "yahoo";
console.log(foo); //prints google again instead of yahoo
不应该打印yahoo,因为变量名的值已经改变了。任何人都可以解释一下。
另一个例子,它的变化......
const foo = [];
foo.push("test");
console.log(foo); // outputs ["test"]
我在这里感到困惑,任何人都可以解释我这个。
答案 0 :(得分:3)
您的第一个示例使用不可变字符串,第二个示例使用可变对象。
JS字符串在声明或创建后是不可变的,因此foo
不是对name
的值的引用,而是指向字符串。您没有更改字符串,而是指向另一个字符串。
数组变量指向对象,并在变异后继续指向同一个对象。但是,您仍然指向同一个对象,因为const
不深。
这也凸显了JS与JS的共同误解。 const
,其功能更像Java' final
,而不是C ++ const
。您将变量声明为const
,而不是对象的实例,因此它只会阻止您重新分配给变量,它不会阻止您改变底层对象。
答案 1 :(得分:2)
来自MDN:
const声明创建对值的只读引用。它并不意味着它拥有的值是不可变的,只是无法重新分配变量标识符。
这意味着您可以更改分配给const
的值,例如更改数组或对象,但无法为const
变量分配新值。 E.g:
<强>有效强>:
const a = [];
a.push(5);
console.log(a);
const b = {};
b['foo'] = 'bar';
console.log(b);
无效:这会抛出错误
const a = [];
a = [5];
console.log(a);
const b = {};
b = {'foo': 'bar'};
console.log(b);