【发布时间】:2023-03-21 16:10:02
【问题描述】:
我已经使用 JavaScript 多年了,这让我很困惑。据我了解,在定义var 时,会发生以下两种情况之一:
- 如果表达式是原语,
var被定义为该原语的新实例,不引用传递的表达式。 - 如果表达式是对象字面量,则会创建一个新对象。
- 如果表达式是现有对象,
var将引用该对象,并且将反映该对象的任何未来更改。
但是,我遇到了案例 3 不适用的情况:
var obj = {body: {'a': 1, 'b': 2, 'c': 3}};
var ref = obj.body;
ref = JSON.stringify(ref);
console.log(typeof ref); // string
console.log(typeof obj.body); // object
由于ref 被定义为obj 的body 属性,我认为将ref 重新定义为字符串也会影响obj.body。那我错过了什么?
【问题讨论】:
-
你覆盖了变量,它不会改变对象中的内容......
-
我认为混淆来自
ref = ...不会改变它指向的对象这一事实。如果您对ref进行了变异(例如通过设置ref.a = 5),您将通过两个引用看到更新。
标签: javascript variables object reference primitive