Javascript中对象的可复制特性
2012-01-07 10:28 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对象的话,会发现,什么都没有变。
作者:AnyKoro
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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)