JavaScript中的Const:何时使用它,是否有必要?

我最近在JavaScript中遇到了const关键字。据我所知,它用于创建不可变变量,并且我已经进行了测试以确保它无法重新定义(在Node.js中):

const x = 'const';
const x = 'not-const';

// Will give an error: 'constant 'x' has already been defined'

我意识到它还没有在所有浏览器上标准化 - 但我只对Node.js V8的上下文感兴趣,我注意到当关键字可以用于相同的效果时,某些开发人员/项目似乎非常喜欢它。var

  • 何时适合使用 ?constvar
  • 是否应该在每次声明不打算重新赋值的变量时都使用它?
  • 如果用它来代替,反之亦然,它实际上有什么区别吗?varconst

答案 1

您的问题有两个方面:使用而不是使用的技术方面是什么,以及这样做与人相关的方面是什么。constvar

技术差异很大。在编译语言中,常量将在编译时被替换,它的使用将允许其他优化,如死代码删除,以进一步提高代码的运行时效率。最近(松散使用的术语)JavaScript引擎实际上编译JS代码以获得更好的性能,因此使用const关键字会通知他们上述优化是可能的,应该完成。这样可以获得更好的性能。

与人相关的方面是关于关键字的语义。变量是一种数据结构,其中包含预期会更改的信息。常量是一种数据结构,其中包含永远不会更改的信息。如果有错误的余地,应始终使用。但是,并非所有在程序生存期内永不更改的信息都需要使用 声明。如果在不同情况下信息应更改,请使用 来指示,即使代码中未显示实际更改也是如此。varconstvar


答案 2

2017年更新

这个答案仍然受到很多关注。值得注意的是,这个答案是在2014年初发布的,从那时起发生了很多变化。支持现在是常态。所有现代浏览器现在都支持,所以使用起来应该非常安全,没有任何问题。const


2014年的原始答案

尽管拥有相当不错的浏览器支持,但我现在会避免使用它。来自MDN关于const的文章

const 的当前实现是特定于 Mozilla 的扩展,不是 ECMAScript 5 的一部分。它在Firefox和Chrome(V8)中受支持。从 Safari 5.1.7 和 Opera 12.00 开始,如果您在这些浏览器中使用 const 定义变量,您仍然可以在以后更改其值。它在 Internet Explorer 6-10 中不受支持,但在 Internet Explorer 11 中包含。const 关键字当前在函数作用域中声明常量(如使用 var 声明的变量)。

然后它接着说:

const将由 ECMAScript 6 定义,但具有不同的语义。与使用 let 语句声明的变量类似,使用 const 声明的常量将是块范围的。

如果您确实使用,则必须添加解决方法以支持稍旧的浏览器。const