javascript - 理解 Javascript 不可变变量

标签 javascript

我想了解 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/

相关文章:

javascript - 在 Node API 中接收完整日期时间而不是仅接收日期

javascript - 为什么将 function($) 传递给 jQuery(...) 会使 $(...) 等同于 jQuery(...)?

javascript - <form/>标签导致刷新页面

javascript - 是否可以在 node.js 的帮助下在 Windows 中将 JSLint 作为命令行运行?

javascript - 使用 Jquery 将单选按钮更改为选中或未选中

Javascript 对象与数组性能

javascript - dojo 选择设置最大宽度

javascript - 尝试查看 IFRAME 的父级时如何解决访问被拒绝的问题

javascript - JQuery 窗口滚动顶部和底部

javascript - 如果使用 react 条件为假,如何返回空的 jsx?