我最近在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关键字可以用于同样的效果时。

什么时候用const代替var比较合适? 它是否应该被用在每一个不存在的变量上 重新分配是声明的? 如果用var来代替,会有什么不同吗 Const还是反之?


当前回答

你回答得很好,但还是简单点吧。

当你有一个定义的常量时,应该使用Const(理解为:它在程序执行期间不会改变)。

例如:

const pi = 3.1415926535

如果你认为这是在以后的执行中可能会改变的东西,那么就使用var。

根据这个例子,实际的区别是,使用const时,你总是假设pi将是3.14[…],这是事实。

如果你把它定义为一个变量,它可能是3.14[…]或者不是。

从更专业的角度来说,Tibos的理论在学术上是正确的。

其他回答

根据我的经验,当我想要设置一些我以后可能想要更改的东西时,我使用const,而不必在代码中寻找已经硬编码的位,例如文件路径或服务器名称。

测试中的错误是另一回事。你试图创建另一个名为x的变量,这将是一个更准确的测试:

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

它提供了:

常量引用,例如,const x =[]——数组可以被修改,但x不能指向另一个数组;而且 块范围。

在ECMAScript 6/2015中,const和let将一起替换var。参见JavaScript ES6变量声明let和const中的讨论

我不是JavaScript编译方面的专家,但是说V8使用了const标志是有意义的。

通常在声明和改变一堆变量后,内存会被分割,V8会停止执行,暂停几秒钟,进行垃圾收集,或者垃圾收集。

如果一个变量是用const声明的,V8可以放心地把它放在一个固定大小的容器中,放在其他const变量之间,因为它永远不会改变。

它还可以为该数据类型保存适当的操作,因为类型不会改变。

var:声明一个变量。值初始化是可选的。

let:声明一个块范围的局部变量。

const:声明一个只读命名常量。

例子:

var a;
a = 1;
a = 2; // Reinitialize possible
var a = 3; // Re-declare
console.log(a); // 3

let b;
b = 5;
b = 6; // Reinitialise possible
// let b = 7; // Redeclare not possible
console.log(b);

// const c;
// c = 9;    // Initialization and declaration at the same place
const c = 9;
// const c = 9; // Redeclare and initialization is not possible
console.log(c); // 9
// NOTE: Constants can be declared with uppercase or lowercase, but a common
// convention is to use all-uppercase letters.

Const不是不可变的。

来自MDN:

const声明创建一个对某个值的只读引用。它 这并不意味着它持有的值是不可变的,只是变量 标识符不能重新分配。