我想了解 Javascript 不可变变量的含义。如果我能做到:
var x = "astring";
x = "str";
console.log(x); //logs str` , then why it is immutable?
我能想到的唯一答案(从我所知道的一点点 C 中)是 var x 是一个指向值为“astring”的内存块的指针,在第二条语句之后它指向另一个值为“海峡”。是这样吗?
还有一个额外的问题:我对 Javascript 的值类型感到困惑。所有的变量对象都在幕后吗?偶数和字符串?
最佳答案
值是不可变的; 变量不是;他们持有对其(原始)值的引用。
string, number, boolean 三种基本类型都有对应的实例为对象的类型:String, Number, Boolean。
它们有时被称为 wrapper types 。
以下值为primitive :
- 字符串:“你好”
- 数字:6、3.14(JavaScript 中的所有数字都是 float )
- bool 值:真、假
- null:通常显式赋值
- undefined:通常是默认(自动分配)值
所有其他值都是对象,包括基元的包装器。
所以:
- 默认情况下对象是可变的
- 对象具有唯一标识并通过引用进行比较
- 变量保存对对象的引用
- 原语是不可变的
- 基元按值比较,它们没有个体身份
您可能会找到 The Secret Life of JavaScript Primitives很好的解释。
此外,在 ES6 中有一个新的 const关键字,它创建一个只读的命名常量,该常量不能通过赋值更改值,也不能在脚本运行时重新声明。
希望这对您有所帮助!
关于javascript - 理解 Javascript 不可变变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16115512/