小编典典

为什么我可以在javascript中更改常量对象

all

我知道 ES6 还没有标准化,但是目前很多浏览器都支持
constJS 中的关键字。

在规范中,它写道:

常量的值不能通过重新赋值来改变,也不能重新声明常量。因此,虽然可以在不初始化的情况下声明一个常量,但这样做是没有用的。

当我做这样的事情时:

const xxx = 6;
xxx = 999;
xxx++;
const yyy = [];
yyy = 'string';
yyy = [15, 'a'];

我看到一切都很好,xxx仍然是。6``yyy``[]

但是如果我这样做yyy.push(6); yyy.push(1);了,我的常量数组已经改变了。现在它是[6, 1],顺便说一句,我仍然无法改变它yyy = 1;

我这是一个错误,还是我错过了什么?我在最新的 chrome 和 FF29 中尝试过


阅读 55

收藏
2022-07-31

共1个答案

小编典典

该文档指出:

…常数不能通过重新分配来改变
…常数不能重新声明

当您添加到数组或对象时,您并没有重新分配或重新声明常量,它已经被声明和分配,您只是添加到常量指向的“列表”中。

所以这很好用:

const x = {};

x.foo = 'bar';

console.log(x); // {foo : 'bar'}

x.foo = 'bar2';

console.log(x); // {foo : 'bar2'}

和这个:

const y = [];

y.push('foo');

console.log(y); // ['foo']

y.unshift("foo2");

console.log(y); // ['foo2', 'foo']

y.pop();

console.log(y); // ['foo2']

但这些都不是:

const x = {};
x = {foo: 'bar'}; // error - re-assigning

const y = ['foo'];
const y = ['bar']; // error - re-declaring

const foo = 'bar'; 
foo = 'bar2';       // error - can not re-assign
var foo = 'bar3';   // error - already declared
function foo() {};  // error - already declared
2022-07-31