我最近在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还是反之?


当前回答

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,而不必在代码中寻找已经硬编码的位,例如文件路径或服务器名称。

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

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

我的意见:

问:什么时候用const代替var比较合适? 答:从来没有!

Q:每次声明一个不会被重新赋值的变量时都应该使用它吗? 答:从来没有!就像这将减少资源消耗一样……

问:用var代替const和用var代替const有什么区别吗? 答:是的!使用var是正确的方法!更容易在开发工具和节省创建一个新的文件进行测试。(var不在const的位置- const试图取代var的位置…)

额外A: let也是一样。JavaScript是一种松散的语言——为什么要限制它?

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

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

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

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

个人喜好。你可以使用const,就像你说的,它不会被重新赋值并且是常量。例如,如果你想分配你的生日。你的生日永远不变,所以你可以把它作为一个常数。但你的年龄确实在变化,所以这可能是一个变量。

为了整合前面的答案,除了性能原因外,声明常量变量有一个明显的优势:如果您意外地试图在代码中更改或重新声明它们,程序将分别不更改值或抛出错误。

例如,比较:

// Will output 'SECRET'

const x = 'SECRET'
if (x = 'ANOTHER_SECRET') {  // Warning! Assigning a value variable in an 'if' condition
    console.log (x)
}

:

// Will output 'ANOTHER_SECRET'

var y = 'SECRET'
if (y = 'ANOTHER_SECRET') {
    console.log (y)
}

or

// Will throw TypeError: const 'x' has already been declared

const x = "SECRET"

/* Complex code */

var x = 0

with

// Will reassign y and cause trouble

var y = "SECRET"

/* Complex code */

var y = 0