最近,很多人问我,const的用法问题,这里给大家澄清一个误区。
常量索引,不是值
在ES6中另外一个定义变量的关键字是 const , 但是它经常被误会为一个“常量”。在ES6中, const 代表一个值的 常量索引 (事实上绝大多数语言都提供这样的功能)。换句话说,变量名字在内存中的指针不能够改变,但是指向这个变量的值 可能 改变。
这里有一个简单的例子。在下面的例子中我们可以创建一个拥有常量索引的数组变量。我们在之后添加值到这个数组中并不改变这个索引,一切都可以运行起来:
const names = [ ] ;
names . push ( “Jordan” ) ;
console . log ( names ) ;
但是,如果我们尝试修改变量索引到一个新的数组——即使是和现在内容一样的数组——我们将获得一个SyntaxError (“Assignment to constant variable”):
const names = [ ] ;
names = [ ] ; // Error!
当然,如果你拥有一个指向string或者number的 const ,当然这里就不会有任何可以修改的值。所有String和Number的方法返回 新的 值(对象)。
最后一个关于使用 const 的注意事项是参考 let 的新作用域规则!那意味着我们应该在我们的代码中使用 let 和 const 完全代替 var 。事实上,依然有很多人支持作为没有涉及到的遗留代码只“允许”使用 var 的想法当一个程序员在一个文件中更新一些代码,他们应该 (并且可能)将所有 var 语句更新为适当的有适当作用域的 let 或者 const 。