javascript - 在 JavaScript 中读取/分配引用类型
问题描述
我喜欢认为我拥有并理解引用类型,但我想知道我在这里缺少什么,引擎盖下发生了什么。
let o = {
foo: 'bar'
};
console.log(o) // logs the object.
let p = o; // assigns reference to object
我已经看过一千遍了,然后不假思索地继续前进,但这一次却给了我意想不到的迷幻震撼。
在这两种情况下,我的大脑都将其解读为“读取 o 和”的值。但是,一个将记录存储的实际数据,而另一个将返回一个引用。我错过了什么使这两行不同的步骤?
是
let p = o;
正常工作的方式,但console.log(o)
会导致某种类型的隐式/默认调用。还是相反,它
o
会自然地从堆中提取实际对象,但赋值本质上总是会分配引用?
“当 x JavaScript 将 z”
有人可以解释它的工作原理,以便我了解它的确切原因吗?
解决方案
如果复制值,则复制对对象的引用。
如果你用它做任何其他事情,那么就会遵循引用并使用对象。
的值o
是对对象的引用。
如果您分配o
给p
然后您复制该引用并且p
也是对对象的引用。
如果您访问o.foo
,那么您遵循对对象的引用并使用它的foo
属性做一些事情。
如果传递o
给函数,则将引用复制到函数中的参数。如果该函数随后访问,paramater.foo
则它遵循对对象的引用并使用其上的值执行某些foo
操作。
推荐阅读
- vba - 创建一个复制和粘贴数据的宏
- xgboost - 如何使用 AWS SageMaker Batch Transform 运行更大的批次
- java - Hippo CMS 教程和 MVC
- javascript - 如何停止收到此错误对预检请求的响应未通过访问控制检查
- cordova - cordova playGamesServices 从排行榜获取用户分数
- java - 使用 Java 在 MongoDB 上迭代聚合
- sql - Vertica/SQL,大小写语法
- powershell - PowerShell 模块中是否存在检查函数
- deep-learning - 用两个完全不同的数据集训练神经网络。
- r - 在一个包中包括 shinyBS