总结
1 ECMAScript 中的数据类型
原始类型(值类型): string、number、boolean、null、undefined、symbol、bigint 共七种
对象类型(引用类型): array、object、regexp、set、,map......
2 ECMAScript中声明变量的方式
共六种方式:
1、 var
2、 function
3、 let
4、 const (常量)
5、 class
6、 import
let、const、class、import 都是 ES6 新增的方式,所声明的变量(常量)都具备 4 个特点:
1)不能重复声明。
2)不能提升。
3)不会作为全局对象的属性。
4)具有块级作用域。
3 实现数组扁平化的方式
//1. 使用flat()
arr.flat(Infinity)
//2. 利用字符串的join方法 缺点:数组的元素都会变为字符串类型
arr.join().split(',')
//3. 自定义递归函数
function flatArray(array) {
//创建一个空数组
let res = [];
// 遍历传进来的数组
for (var i = 0; i < array.length; i ++) {
//判断数组的元素还是不是数组
if (array[i] instanceof Array) {
res = res.concat(flatArray(array[i]));
} else {
res.push(array[i]);
}
}
//返回新数组
return res;
}
4 对象的浅拷贝
数组的浅拷贝:
1. [...arr] 扩展运算符
2. arr.concat() 返回新的数组
3. arr.slice() 返回新的数组,从头截取到尾
4. Array.from(arr) 返回新的数组
对象的浅拷贝:
1. {...obj} 扩展运算符
2. Object.assign({}, obj) 返回新对象,利用对象合并实现对象浅拷贝
5 对象的浅拷贝
// 1. 借助于JSON 无法拷贝方法,适合于纯数据对象
JSON.parse(JSON.stringify(obj));
// 2. 递归函数实现
//定义函数 获取对象的构造函数(类)名
function getObjectClass(obj) {
return Object.prototype.toString.call(obj).slice(8,-1)
}
//深拷贝的函数
function deepClone(obj) {
//判断obj是对象是数组还是其他
if (getObjectClass(obj) === 'Object') {
var res = {}; //创建空的对象
} else if (getObjectClass(obj) === 'Array') {
var res = []; //创建空数组
} else {
return obj;
}
//对传入的对象(遍历)进行遍历
for (let i in obj) {
res[i] = deepClone(obj[i]);
}
//返回新数组或对象
return res;
}