我知道 ES6 还没有标准化,但是目前很多浏览器都支持 constJS 中的关键字。
const
在规范中,它写道:
常量的值不能通过重新赋值来改变,也不能重新声明常量。因此,虽然可以在不初始化的情况下声明一个常量,但这样做是没有用的。
当我做这样的事情时:
const xxx = 6; xxx = 999; xxx++; const yyy = []; yyy = 'string'; yyy = [15, 'a'];
我看到一切都很好,xxx仍然是。6``yyy``[]
xxx
6``yyy``[]
但是如果我这样做yyy.push(6); yyy.push(1);了,我的常量数组已经改变了。现在它是[6, 1],顺便说一句,我仍然无法改变它yyy = 1;。
yyy.push(6); yyy.push(1);
[6, 1]
yyy = 1;
我这是一个错误,还是我错过了什么?我在最新的 chrome 和 FF29 中尝试过
该文档指出:
…常数不能通过重新分配来改变 …常数不能重新声明
当您添加到数组或对象时,您并没有重新分配或重新声明常量,它已经被声明和分配,您只是添加到常量指向的“列表”中。
所以这很好用:
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