[TOC]
### 浅拷贝
浅拷贝操作会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝,如果属性是基本类型,拷贝的就是基本数据类型的值,如果属性是引用类型,拷贝的就是内存地址。
* 手写
~~~
function copy(original) {
var o = {};
for(var key in original) {
o[key] = original[key];
}
return o;
}
~~~
### 深拷贝
深拷贝操作会将一个对象从内存中完整拷贝一份出来,从堆内存中开辟一个新的区域放新对象,且修改新对象不会影响原对象。
* 手写
~~~
function deepCopy(original) {
if(typeof original !== 'object') return;
var o = {}
for(let key in original) {
o[key] = typeof original[key] === 'object' ? deepCopy(original[key]) : original[key]
}
return o;
}
~~~
详情列子:【JavaScript】- 【数组】- 【数组去重】- 【数组的克隆(深拷贝)的方法】
- 赋值与浅拷贝有什么区别?
> 1. 把一个对象赋值给另一个新变量时,赋值的是该对象在栈中的地址,两个对象指向的是同一个堆空间。
> 2. 浅拷贝是重新在堆空间中创建一块空间,拷贝后的基本数据类型不相互影响,拷贝后的对象引用类型会相互影响。
- HTML,CSS
- 如何书写高效的css样式
- box-shadow
- 表格合并行列
- 自适应单位
- 隐藏元素
- 浏览器缓存
- 浏览器内核
- css和js的合理走位
- 2021样式问题汇总
- 模拟面试
- 移动端适配问题
- flexible(rem)
- vw+rem
- 判断一个属性是对象的私有属性
- px rpx em rem vw
- 清除浮动
- 栅格系统
- get&&post
- 雪碧图
- new操作符
- call apply bind区别
- 前端模块化
- 回调函数
- 回调地狱(封装版)
- 回调地狱(promise)
- 回调地狱(generator)
- 回调地狱(async)
- es6新特性
- let
- 箭头函数
- 展开 解构 默认赋值
- vue生命周期
- axios封装
- axios跨域拿数据
- ajax封装
- JavaScript
- 数组
- 排序
- 取偶数
- 反转排序
- 取最大值
- 数组去重
- 复杂版
- 数组的克隆(深拷贝)的方法
- 求质数
- 原型和原型链
- 创建对象
- 什么是路由
- SASS
- jQuery中的append和prepend区别?
- css动画及js动画的区别
- 隐式类型转换
- 原型
- 事件传播
- 函数
- 增加属性
- 构造函数
- 一元操作符
- 作用域
- 短语
- Vue
- - nextTick
- 自我介绍
- 哦豁(;д;)
- for in效果
- 事件
- promise特点
- 如何实现一个ajax请求
- 媒体查询
- substr和substring
- MVC、MVVM
- 面向对象
- 取数据、渲染数据
- ajax
- vue
- React
- es6-class
- 几种类型的DOM节点
- js同源策略
- 闭包
- 2021
- 数据类型
- 闭包2
- 防抖节流
- 原型与原型链
- call与apply与bind
- 深浅拷贝
- New关键字
