我最近在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还是反之?
为了整合前面的答案,除了性能原因外,声明常量变量有一个明显的优势:如果您意外地试图在代码中更改或重新声明它们,程序将分别不更改值或抛出错误。
例如,比较:
// 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
简介:
Const创建一个不可变绑定,这意味着Const变量标识符是不可重赋的。
const a = "value1";
你不能用
a = "value2";
然而,如果const标识符包含一个对象或数组,只要不重新赋值,它的值就可以更改。
const x = { a: 1 }
x.a = 2; // Is possible and allowed
const numbers = [1, 2];
numbers.push(3); // Is possible and allowed
请注意,const是块作用域,就像let一样,它与var不同(var是函数作用域)。
简而言之,当某些东西不太可能通过重赋来改变时,使用const,否则使用let或var,这取决于你想要的作用域。
当可以通过重赋改变什么,不能通过重赋改变什么的时候,对代码进行推理就容易得多了。将const对象更改为let对象非常简单。在默认情况下使用const会让您三思而后行。在很多情况下,这是一件好事。
对于为什么使用const, Tibos的回答很好。
但是你说:
据我所知,它是用来创建不可变变量的
这是错误的。改变变量不同于重新赋值:
var hello = 'world' // Assigning
hello = 'bonjour!' // Reassigning
使用const,你不能这样做:
const hello = 'world'
hello = 'bonjour!' // Error
但是你可以改变你的变量:
const marks = [92, 83]
marks.push(95)
console.log(marks) // [92, 83, 95] -> the variable has been mutated.
因此,任何不使用=号而改变变量值的进程都是在改变变量。
注:+=例如…重新分配!
var a = 5
a += 2 // Is the same as a = a + 2
所以,底线是:const不会阻止你改变变量;它阻止您重新分配它们。