(一)JS中基本类型和引用类型 JavaScript的变量中包含两种类型的值:基本类型值 和 引用类型值,在内存中的表现形式在于:前者是存储在栈中的一些简单的数据段,后者则是保存在堆内存中的一个对象。 基本类型值 在JavaScript中基本数据类型有 String , Number , Undefined , Null , Boolean ,在ES6中,又定义了一种新的基本数据类型 Symbol ,所以一共有6种。 基本类型是按值访问的,从一个变量复制基本类型的值到另一个变量后,这两个变量的值是完全独立的,即使一个变量改变了也不会影响到第二个变量。 var str1 = '撩课'; va JavaScript中的拷贝操作在编程中至关重要,特别是在处理对象和数组时。主要分为两种类型:浅拷贝和深拷贝。 浅拷贝,如其名,只复制对象或数组的顶层属性,而不深入复制嵌套的对象或数组。这意味着,如果源对象的某个属性是另一个对象的引用,那么目标对象也会引用同一个内存地址。例如,使用`Object.assign()`或扩展运算符(`...`)都是浅拷贝的方法。以下是一个例子: ```javascript var obj1 = { name: '张三', friend: { city: '北京' } }; var obj2 = Object.assign({}, obj1); // 或者 var obj3 = { ...obj1 }; obj1.friend.city = '上海'; console.log(obj1); // { name: '张三', friend: { city: '上海' } } console.log(obj2); // { name: '张三', friend: { city: '北京' } } console.log(obj3); // { name: '张三', friend: { city: '北京' } } ``` 可以看到,修改`obj1`的`friend`属性影响了`obj1`,但不影响`obj2`和`obj3`,因为它们都只复制了`friend`对象的引用。 深拷贝则会创建一个全新的对象,包括所有嵌套的对象和数组,确保修改新对象不会影响原始对象。在JavaScript中,实现深拷贝有多种方式,如递归、`JSON.parse()`和`JSON.stringify()`的组合,以及第三方库如lodash的`_.cloneDeep()`。 使用`JSON.parse()`和`JSON.stringify()`组合的深拷贝方法需要注意,这种方法不能处理函数、循环引用、undefined和symbol类型的值: ```javascript function deepCopy(obj) { return JSON.parse(JSON.stringify(obj)); } var obj1 = { name: '张三', friend: { city: '北京' }, func: function() {} }; var obj2 = deepCopy(obj1); // func 属性丢失 console.log(obj2.func); // undefined ``` 为了解决这些问题,可以使用递归或第三方库来创建更健壮的深拷贝。 理解JavaScript中的浅拷贝和深拷贝是优化代码和避免意外副作用的关键。在处理复杂的数据结构时,尤其需要注意拷贝的深度,以防止不必要的副作用。正确地使用浅拷贝和深拷贝可以帮助我们编写更可控、更易于维护的代码。
- 粉丝: 1
- 资源: 940
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0