JavaScript中的变量赋值和突变指南

208 阅读3分钟

突变是你在JavaScript世界中经常听到的东西,但它们到底是什么,它们是否像人们说的那样邪恶?

在这篇文章中,我们将介绍变量赋值和突变的概念,看看为什么它们会成为开发者的一个真正的麻烦。我们将研究如何管理它们以避免问题,如何尽可能少地使用它们,以及如何保持你的代码可预测性。

如果你想更详细地探讨这个话题,或者想了解现代JavaScript,请查看我的新书 学习用JavaScript编码.

让我们从价值类型的最基本的东西开始......

数据类型

JavaScript中的每一个值都是一个原始值或者一个对象。有七种不同的原始数据类型。

  • 数字,如3,0,-40.625
  • 字符串,如'Hello',"World",`Hi`''
  • 布尔运算,truefalse
  • null
  • undefined
  • 符号 - 一个独特的标记,保证永远不会与另一个符号相冲突
  • BigInt - 用于处理大的整数值

任何不是原始值的东西都是一个对象,包括数组、日期、正则表达式,当然还有对象字面。函数是一种特殊类型的对象。它们绝对是对象,因为它们有属性和方法,但它们也能被调用。

变量赋值

变量赋值是你在编码中最先学会的东西之一。例如,这就是我们如何将数字3 赋给变量bears

const bears = 3;

变量的一个常见的比喻是一个带有标签的盒子,里面放有数值。上面的例子将被描绘成一个包含标签 "bears "的盒子,里面的数值是3。

variables like a box

另一种思考方式是将标签bears 映射到3 的值上。

variables like a reference

如果我把数字3 赋给另一个变量,它就会引用与bears相同的值。

let musketeers = 3;

variables referencing the same value

变量bearsmusketeers 都引用了同一个原始值 3。我们可以用严格的平等运算符=== 来验证这一点。

bears === musketeers
<< true

如果两个变量引用的是同一个值,平等运算符就会返回true

处理对象时的一些问题

前面的例子显示了原始值被分配给变量。赋值对象时也使用了同样的过程。

const ghostbusters = { number: 4 };

这种赋值意味着变量ghostbusters 引用一个对象。

variables referencing different objects

然而,当把对象赋值给变量时,一个很大的区别是,如果你把另一个对象字头赋值给另一个变量,它将引用一个完全不同的对象--即使两个对象字头看起来一模一样例如,下面的赋值看起来像是变量tmnt (忍者神龟)引用了与变量ghostbusters 相同的对象。

let tmnt = { number: 4 };

尽管变量ghostbusterstmnt 看起来像是引用了同一个对象,但实际上它们都引用了一个完全不同的对象,如果我们用严格的平等运算符检查,就可以看到。

ghostbusters === tmnt
<< false

variables referencing different objects

继续阅读《JavaScript中的变量赋值和变异指南》,请点击SitePoint