好事总会发生在下个转弯。希望你的愿望都能一一实现。
本文纯属个人理解,学习记录知识的笔记,如有错误请指出,我会及时改正谢谢!!
1.ESNext指的是下一版本,每年6月都会发一版
2.let和const
var声明的变量会进行变量提升,声明的变量会在全局 let和const会生成一个块级作用域,不会进行变量提升,const会定义一个常量,但是声明对象中的key是可以改变的,其他情况是不可以改变的
3.箭头函数:
this是在位置定义的时候决定的其他函数的this是在调用时候决定的,可以简写,箭头函数不能用作构造函数(因为没有constructor而且没有arguments)
4.class
static为class类的静态属性只能通过类进行调用
class Test {
constructor(name) {
this.name = name
}
static getName(0 {
return `${this.name} + xixixii`
}
}
5.模板字符串
可以使用${}中间使用一些变量还支持换行操作
//面试题:编写一个render函数实现template的函数
6.解构
(1)数组的解构
let [a, b, c] = [1, 2, 3]
let [a, b] = [{name: '1'}, {name: '2'}]
(2)对象的解构
let {f1, f2} ={ f1: 'f1', f2: 'f2'}
解构的原理:针对可迭代对象的Iterator(是一种接口对各种不一样数据提供统一的的访问机制,所有能解构的数据都需要),通过遍历殊勋获取对应的值进行赋值 Iterator的作用:为各种不同数据解构提供统一的访问接口,让数据的解构按照顺序处理,让for of可以遍历
7.遍历
(1)for in 在遍历数组时候取得的是index遍历对象时取的是对象的key( 缺点不仅会遍历对象上的属性还会遍历原型链上的属性,可以通过hasOwnProperty,不太适合遍历数组)
(2)for of 可以用来遍历数组可以触发break中断
8.Object
(1)Object.keys可以拿到对象key可以组成的数组
(2)Object.values可以拿到对象所有value组成的数组
(3)Object.entrys可以返回一个对象多有key和value组成的键值对的数组
(4)Object.getOwnProperty用户获取对象本身的属性
(5)Object.getOwnPropertyDescripter用户获取对象的属性的描述符,会生成一个对象,包括 configurable(可配置) writable(可书写) enumerable(可枚举属性)
Reflact就是相当于相当于是对Object方法的优化
(6)Object.assign是一种浅拷贝,用于合并对象,如果是相同属性会后面覆盖前面的值 跟{...obj1, ...obj2}用法类似
const newObj = Object.assign(obj1, obj2)
9.数组
(1)Array.flat将多维数组变成一维数组(arr, dep(深度))dep为Infinity的时候会将任何数组转为1维数组
简易的实现
function flatArray(arr, d = 1 ) {
if(d > 0) {
return arr.reduce((res,val)=>{
if(Array.isArray(val)) {
res = res.concat(flatArray(val, d-1))
} else {
res.concat(val)
}
return res
}, [])
} else {
return arr.slice()
}
}
(2)Array.icludes判断数组中存不存在结果返回true,false
(3)Array.from可以将伪数组转换为真数组