1.软文推荐

2.软文推荐

3.软文推荐

js数据类型主要分基本数据类型和引用数据类型。前者包括Number,String等,后者主要是Object,因此以下会针对不同的数据类型来分析,需要的朋友可以参考一下

1、js内存

js内存,或者说大部分语言的内存都分为栈和堆。基本数据类型的变量值分配在栈上,引用数据类型的变量值分配在堆上,栈中只是存储具体堆中对象的地址。

2、赋值

对于基本数据类型,赋值操作是拷贝,即新旧变量不会相互影响。

var a = 1;
var b = a;
b = 2;
console.log(b); // 2

对于引用数据类型,赋值操作只是在栈中新增一个指向堆中对象的变量,即复制引用地址。新旧变量之间会互相影响,即在新变量上改变对象值,旧变量对应值也会改变。

var a = {
   name: "mike"
};
var b = a;
b.name = "jack";
console.log(a); // {name: "jack"}
3、浅拷贝

对于基本数据类型和不具有嵌套对象的数据,均是拷贝操作,新旧变量之间不会相互影响。

var a = {
   name: "mike"
};
var b = {};
b.name = a.name;
b.name = "jack";
console.log(a) // {name: "mike"}

但是对于具有嵌套对象的数据,浅拷贝只拷贝第一层对象,深层次的值仍然是复制引用地址。

var a = {
   name: "mike",
   language: {
       first: "english",
       second: "chinese"
   }
};
var b = {};
b.name = a.name;
b.name = "jack";
b.language = a.language;
b.language.first = "japanese"
console.log(a) // { language : {first: "japanese", second: "chinese"}}

js实现浅拷贝,思想:遍历target的每个属性,将起属性名和值赋值给新变量。

如果你明白了赋值的含义,那么在代码的第四行,当此时的target[key]的值是对象的时候,通过赋值赋予新变量,本质上是复制引用数据类型在堆中的地址,就不难理解为什么浅拷贝对于是否是嵌套对象的有不同结果了。

function shallowCopy(target) {
   let result = {};
   for (const key in target) {
       result[key] = target[key];
   }
   return result;
}
4、深拷贝

深拷贝是完完全全的拷贝,新旧变量之间不会相互影响。

对于参数是否是对象有不同的处理方法,如果是对象,对于对象的每个属性和值赋值然后递归处理; 否则直接返回。

function clone(target) {
   if (typeof target === "object") {
       //判断是否是数组
       let result = Array.isArray(target)? [] : {};
       for (const key in target) {
           result[key] = clone(target[key]);
       }
       return  result;
   } else {
       return target;
   }
}

到此这篇关于js中的赋值 浅拷贝和深拷贝详细的文章就介绍到这了

本文来源:www.lxlinux.net/9537.html,若引用不当,请联系修改。

相关文章 8

1

美国云服务器好吗(美国云服务器推荐) 2分钟前

目录:1、美国服务器华纳云怎么样?2、美国云服务器好在哪?3、美国和欧洲的服务器哪个好4、美国服务器为什么那么受欢迎?美国服务器...

2

Linux系统查看jdk安装目录命令 4分钟前

当我们在Linux系统中安装jdk以后忘记安装目录,从而无法设置环境变量,那么如何查找jdk安装目录?下面良许教程网为大家分享一下Linux系统...

3

shopee怎么注册开店(shopee怎么注册开店合法吗) 5分钟前

目录:1、注册虾皮需要哪些资料2、虾皮电商怎么入驻?3、shopee跨境电商怎么注册注册虾皮需要哪些资料 注册虾皮的资料: 1、企业营业执...

4

Ubuntu 16.04 下安装Firefox的Flash插件 7分钟前

在ubuntu系统环境下面打开优酷视频,发现无法播放视频。Adobe Flash Player 是一款轻量级浏览器插件,具有丰富的 Internet 应用运行时间,提供持...

5

Linux下添加PATH环境变量 10分钟前

PATH环境变量作用是指定命令搜索路径,在i命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应...

6

阿里商标注册入口(阿里品牌注册) 11分钟前

目录:1、阿里云商标顾问注册操作指导2、商标注册在阿里怎么注册3、怎么申请阿里巴巴4、阿里巴巴如何注册5、阿里云怎么注册商标?阿里...

8

海南vps高防御云空间的简单介绍 13分钟前

目录:1、vps云服务器怎么用2、云主机 vps 云空间 asc esc等云概念的区别简单易懂的说明 以及哪一个可以远程桌面3、vps云服务器是什么4、V...