其实这里问的就是es6新增的内容。
let、const
let, const 声明 块级作用域,是对var声明变量的补充。由于var声明可以提升变量名但不提升变量值的行为,导致Js可以跳过很多错误的检查,对我们避免问题或定位发生的错误不友好。引用了let, const 块级作用域,一个变量只能声明一次,并且需要先声明后使用,否则会发生暂时性死区。
变量的解构赋值
- 数组的解构赋值
- 对象的解构赋值
- 字符串的解构赋值
- 函数参数的解构赋值
// 数组
const [a, b, c] = [1, 2, 3]
// 对象
const [age, sex] = {age: 18, sex: 'woman', name: '赵敏'}
// 字符串的解构赋值
const [str1, str2, ...strArr] = "hello wrold"
// 函数的参数解构赋值
const sum = ([a, b]) => a + b
const fn = ({age, sex}) => {
console.log(`this is a ${sex}, his is ${age} years old.`)
}
箭头函数
箭头函数之前已写过一篇介绍,这里不再重复。
Symbol
是es6引进的一个新的原始数据类型,表示独立无而二的值。
Set、Map数据结构
三种异步编程的解决方案
for…of 循环
本质
for…of 循环内部调用的是数据结构的Symbol.iterator方法。
使用范围
包括数组、类数组、Set和Map 结构,字符串、Generator对象。
数组
const arr = ['red', 'green', 'blue']
for (let v of arr) {
console.log(v)
}
for … in 用来遍历键名,for…of 用来遍历键值。
Set和Map结构
const arr = ['red', 'green', 'blue', 'blue']
let engines = new Set(arr)
for (let e of engines) {
console.log(e)
}
// Map
let es6 = new Map()
es6.set('set', 'woman')
es6.set('age', 18)
es6.set('name', '赵敏')
for (let [name, value] of es6) {
console.log(name + ':' + value)
}
对象
let obj = {
age: 18,
sex: 'woman',
name: '赵敏'
}
// 遍历键名
for (let e of Object.kesy(obj)) {
console.log(e)
}
// 遍历键值
for (let [key, value] of Object.entries(obj)) {
console.log(`${key}: ${value}`)
}
Proxy
是一种元编程,用来代理操作的默认行为。Proxy 本身是一个构造函数,可以用来改写对象的默认行为。
Proxy 还提供了13种Api,去操作对象。
Vue3.0放弃了Obejct.defineProperty, 而是使用Proxy 去绑定数据和属性。
优点:
proxy 速度更快
13种Api
Object.definePropery 无法监听属性的添加、删除,也不能监听引用类型的数据变更。但是Proxy 可以。
let person = {age: 18, name: '赵敏'}
let proxy = new Proxy(person, {
get: function(target, property) {
if (property === 'age') {
return 20
}
}
})
console.log(proxy.age) // 20
Reflect
目的:
将函数内部的方法放在Reflect 上
让操作对象的返回值更合理
使操作Object 编程函数行为
Reflect对象对应的方法和Proxy对象对应的方法一一对应
let obj = {age: 18, sex: 'woman'}
console.log(Reflect.get(obj, 'age')) // 18
console.log(Reflect.set(obj, 'age', 20))
console.log(Reflect.get(obj, 'age')) // 20
console.log(Reflect.has(obj, 'age')) // true
Reflect.deleteProperty(obj, 'age')
console.log(Reflect.has(obj, 'age')) // false
conosle.log(Reflect.get(obj, 'age')) // undefined