+ 复制数据的形式
+ 复制的数据: 非函数数据
复制数据的几种级别
1. 赋值
=> 把一个变量存储的值复制一份给到另一个变量
=> 基本数据类型赋值以后两个变量没有关系
=> 复杂数据类型赋值以后, 两个变量操作同一个存储空间
2. 浅拷贝
=> 制作一个和原始数据一模一样的数据结构
=> 把原始数据结构中的内容一个一个的复制到新数据结构中
=> 只能拷贝一层数据结构
3. 深拷贝
=> 按照浅拷贝的方式来继续进行第二层数据的拷贝
=> 当我拷贝第一层数据的时候
-> 如果遇到某一个 key 保存的值是复杂数据类型
-> 进入到这个复杂数据类型内再次拷贝
var o1 = {
name: 'Jack',
age: 18,
gender: '男',
info: {
weight: 180,
height: 180,
address: {
city: '北京'
}
},
hobby: {
ball: ['篮球', '足球', '羽毛球'],
sport: ['跑步', '游泳']
}
}
var o2 = {}
//浅拷贝
for (i in o1) {
o2[i] = o1[i]
}
//o1中的info、hobby、info.address地址空间都赋值给o2,
//修改o2的其他属性不会改变o1,但修改上述的几个对象的值仍然会同时改变o1中的值
//因为浅拷贝只拷贝一层,一层里的对象的地址空间指向仍然一样
function deepCopy(origin, target) {
//深拷贝 origin->原始对象、target->要创建的目标对象
for (var k in origin) {
if (Object.prototype.toString.call(origin[k]) === '[object Array]') {
target[k] = []
deepCopy(origin[k], target[k])//递归实现深拷贝
} else if (Object.prototype.toString.call(origin[k]) === '[object Object]') {
target[k] = {}
deepCopy(origin[k], target[k])
} else {
target[k] = origin[k]
}
}
}
变量值的快速交换
var a = 10,b = 20 a = [b, b = a][0]//a=20,b=10
//通过数快速交换数据 通过ES6语法的析构赋值
数组常用方法-
push()
- 语法: 数组.push(数据, 数据, …)
- 作用: 向数组的末尾追加指定的数据
- 返回值: 追加数据后最新的数组的长度
-
unshift()
- 语法: 数组.unshift(数据)
- 作用: 向数组的最前面插入数据
- 返回值: 插入数据后最新的数组的长度
-
pop()
- 语法: 数组.pop()
- 作用: 删除数组的最后一个数据
- 返回值: 被删除的数据
-
shift()
- 语法: 数组.shift()
- 作用: 删除数组最前面一个数据
- 返回值: 被删除的数据
-
reverse()
- 语法: 数组.reverse()
- 作用: 反转数组
- 返回值: 反转以后的数组
-
sort()
- 语法:
-
数组.sort()
-
数组.sort(function (a, b) { return a - b }) 升序 -
数组.sort(function (a, b) { return b - a }) 降序 - 作用: 对数组进行排序
- 返回值: 排序后的数组
-
splice()
- 语法:
-
数组.splice(开始索引, 多少个)
-
数组.splice(开始索引, 多少个, 要插入的数据)
-
注意: 从哪一个索引开始截取, 从哪一个索引插入
- 作用: 截取数组部分内容, 并插入新的内容
- 返回值: 一个新的数组
-
你截取的所有内容放在这个新数组内
-
slice()
- 语法: 数组.slice(开始索引, 结束索引)
- 注意: 包前不包后, 包含开始索引, 不包含结束索引
- 注意: 可以填写负整数, 等价于 length + 负整数
- 作用: 从数组内截取部分数据(不会改变原始数组, 而是复制出来)
- 返回值: 必然是一个新数组
- 数组内就是截取出来的部分数据
-
join()
- 语法: 数组.join(‘连接符’)
- 作用: 把数组内的每一项用连接符连接成一个字符串
- 返回值: 连接好的字符串
-
concat()
- 语法: 数组.concat(数组2, 数据)
- 作用: 把参数的数组展开拼接到原始数组内
- 返回值: 拼接好的数组
-
indexOf()
- 语法:
- 数组.indexOf(数据)
- 数组.indexOf(数据, 开始索引)
-
lastIndexOf()
- 语法:
- 数组.lastIndexOf(数据)
- 数组.lastIndexOf(数据, 开始索引)
- 作用: 从后向前检索数组中第一次出现该数据的索引位置
- 返回值: 是一个数字
- 如果检索到的该数据, 那么就是该数据第一次出现的索引位置
- 如果没有该数据, 那么就是 -1



