【问题标题】:relationship between Javascript objects and variablesJavascript对象和变量之间的关系
【发布时间】:2021-06-20 12:38:08
【问题描述】:
在 javascript 中,对象被视为变量(至少据我所知)。
例如:
var myCar = new Object();
myCar.make = 'Ford';
myCar.model = 'Mustang';
myCar.year = 1969;
我不明白这背后的逻辑。即使在像 c++ 这样的语言中也是如此(即 C++ 对象可以被视为变量)吗?
【问题讨论】:
标签:
javascript
object
oop
variables
【解决方案1】:
从技术上讲,您创建的 myCar 是一个变量,用于存储您使用 new Object() 创建的对象的实例。
变量就像一个盒子,您可以在其中存储特定数据并通过代码访问它。
因此,变量可以有多种形状或形式,具体取决于您放入的数据。它可以是字符串、对象、数组、数字或布尔值。不一定必须是对象。
【解决方案2】:
我认为您在这里混淆了几个概念。 “变量”是一种引用对象的方式,在 JavaScript 之类的语言中,是一种保留对它的引用的方式,因此在你完成它之前它不会消失。
在 C++ 中也有变量,但它们对程序员来说更方便,因为一旦代码被编译,它们就不会像在 JavaScript 中那样以相同的方式存在,它们通常可以被优化掉。
在您的代码中,您有一个变量myCar,它可以让您操纵对象。如果你这样做了:
new Object()
这会创建一个对象,但实际上会将其丢弃。在 JavaScript 中,这会收集和清理垃圾。在 C++ 中,这是一个内存泄漏。
你可以有没有变量的对象,也可以有没有对象的变量,像这样:
var x = 9
console.log(typeof(x))
// => number
其中x 是一个变量,它只是一个数字,而不是一个对象。
说“对象被认为是变量”就像说“房子可以被认为是它的街道地址”。但这不是真的。这是一栋恰好有特定街道地址的建筑物,但是您可以将房屋四处移动,有些房屋甚至为此安装了轮子。同样,地址可以改变,但房子保持不变。
街道地址是引用房屋的一种方式,就像变量可以引用对象一样。它也可以引用一个空地块,如 JavaScript 中的 undefined。
提示:现在使用 let 或 const 而不是更通用、有时很麻烦的 var 通常是一个好习惯。