我知道ES6尚未标准化,但是目前许多浏览器都支持const JS中的关键字。
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