代码改变世界

Javascript中对象的可复制特性

  AnyKoro  阅读(250)  评论(0编辑  收藏  举报

在Javascript中,对象其实就是一个key-value的array。但是出于节约资源的目的,几乎所有的现代语言,在出现以下代码的场景时候,都会采用引用传递,而并不是复制。

objectB=objectA;

对于诸如想C#之类的语言,你需要依靠专门的函数去完成clone的功能。但是Javascript却可以更简便的实现,关键利用的就是其Key-Value的array的特性。

在JavaScript中,对于普通基本类型变量的复制,是采用值传递的,这个和其他很多语言的机制也是相同的。

例如,以下代码。

var a=3,b=2;
b=a;//b=3
b=4;//a=3

从上面代码,我们很明显可以看出是真正的复制。

因此,我们就很容易想到,既然JavaScript对象是key-value的array,那么如果我们把每个值取出来然后付给另一个对象是不是就ok了?

答案是肯定的。这里我写个简单的演示程序:

复制代码
var a={
property:"property",
},b={};

//假复制
b=a;//复制,引用传递
b.property="change";//a.property值也为"change"了。

//真复制。
var c={};
a.property="back";
for(var item in a){
if(a.hasOwnProperty(item)){
c[item]=a[item];

}
}
c.property="changeagain";//a.property还是为back
复制代码

在这里要注意的是,我们这里的c对象,不能用b对象代替,因为之前b对象已经被引用指向了a。你现在仍和改动,他默认都是会指向a的,所以如果你用b对象的话,会发现,什么都没有变。


编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示