Muk*_*mar 83 javascript const ecmascript-6
Axel Rauschmayer博士在Exploring ES6中有const定义:
const像let一样工作,但是你声明的变量必须立即初始化,其值不能随后改变.[...]Run Code Online (Sandbox Code Playgroud)const bar = 123; bar = 456; // TypeError: `bar` is read-only
然后他写道
const仅表示变量始终具有相同的值,但并不意味着值本身是或变为不可变的.
我对这个陷阱感到困惑.任何人都可以清楚地定义const这个陷阱吗?
Can*_*rop 149
当您使用constJavaScript创建内容时,您无法重新分配变量本身以引用其他内容.但是,变量仍然可以引用可变对象.
const x = {a: 123};
// This is not allowed. This would reassign `x` itself to refer to a
// different object.
x = {b: 456};
// This, however, is allowed. This would mutate the object `x` refers to,
// but `x` itself hasn't been reassigned to refer to something else.
x.a = 456;
Run Code Online (Sandbox Code Playgroud)
对于字符串和数字等基元,const更容易理解,因为您不会改变值,而是为变量赋值.
Mik*_*ost 96
MDN总结得很好:
const声明创建对值的只读引用.它并不意味着它拥有的值是不可变的,只是不能重新赋值变量标识符.例如,在内容是对象的情况下,这意味着对象本身仍然可以被更改.
更简洁:const创建一个不可变的绑定.
换句话说:const,就像var一样,为你提供了一个可变的内存块,你可以在其中存储一些东西.但是,const指示你必须继续引用同一块内存 - 你不能将变量重新分配给不同的内存块,因为变量引用是常量.
要在你宣布它之后真正做出一些不变和不变的东西,你需要使用类似的东西Object.freeze().但是,这很浅,仅适用于键/值对.冻结整个对象需要更多的努力.以高效的方式反复这样做更具挑战性.如果你真的需要它,我建议你看看像Immutable.js这样的东西
小智 15
const和let声明控制是否允许标识符和值之间的重新绑定(也称为重新分配):
const x = "initial value";
let y = "initial value";
// rebinding/reassignment
try { x = "reassignment" } catch(e) { console.log(x) } // fails
y = "reassignment"; // succeeds
console.log(y);Run Code Online (Sandbox Code Playgroud)
不变性在类型级别受到控制.Object是一个可变类型,而是String一个不可变类型:
const o = {mutable: true};
const x = "immutable";
// mutations
o.foo = true; // succeeds
x[0] = "I"; // fails
console.log(o); // {mutable: true, foo: true}
console.log(x); // immutableRun Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7293 次 |
| 最近记录: |