一,变量提升
- let
特点:1,局部作用域;2,不能变量提升;3,不能重新声明
- const
特点:1,局部作用域;2,不能重复声明;3,不会变量提升;4,声明必须赋值;5,赋值后不能修改;6,建议大写
二,解构
定义:把对象或者数组解析为单独的变量;
数组解构:用 “,” 分割;可以跳过;......剩余值;给默认值;有顺序的
例如:let [a,,b,,c,d=10,......res] = arr;
对象解构:变量名和对象的键名保持一致;无序的
例如·:let {age,name,eye=2}=obj;
三,字符串
- 字符串模板:``包裹字符串,${变量};
优点:语义清晰,可以包含特殊字符,保留换行
- 字符串检测
includes 是否包含
startsWith 是否开头包含
endsWith 是否结尾包含
- 常见方法
repeat(n)把字符串重复n次
padStart(len,sub)把字符串用n填充len长度
padEnd(len,sub)从后面开始填充
四,函数
- 箭头函数
1,=>前是参数,=>后是执行语句也是返回值
2,参数如果不是一个,需要用()包裹
3,执行语句如果不是一行用{}包裹
4,返回值如果是对象字面量形式用()包裹
5,箭头函数中的this指向函数的上一层作用域的this
- 默认参数
function fn(a=10){}
- 不定参
function fn(...arg){}
- 扩展参
调用参数的时候,把数组扩展后当参数传递
fn(...arr);
五,对象
- 属性简写
- 动态简写
- 函数简写
(say(){})
- 继承
六,类
特点:
- 用class声明,本质是function
- construction构造
- extends继承
- new实例化
-
class Cat extends Animal{ construction(name,color){ super(name); this.color=color; } say(){} } var c1 = new Cat("小猫咪","五彩斑斓的黑")
七,模块化
- <script type=''module''>
- 导出
- export{name} 导出一个
- export{name,fun} 导出多个
- export default Cat 导出默认
- 导入
- import{name}from url
- import{name,fun}from url
- import Cat from url 导入默认
- import Cat{name,fun}from url 合并默认
- import * as utils from url 导入所有as关键字
- 文件打开必须是http协议,不能是D: C:file协议
八,Set集合
- 初始化
var s1 = new Set([1,2,1])
- 利用set特性去重
arr= [...new Set(arr)]
- 常用方法
- add添加
- delete删除
- clear清空
- has检查是否有
- size长度
九,WeakSet集合
- 内容不重复
- 内容必须是引用对象
-
new WeakSet([...])
十,Map 图
- 类似于对象
- 特点:键名可以是任意类型
- 初始化:
new Map{[["abc",18],["def",20]}
- 方法
- set添加
- get获取
- has检测
- size长度
- delete删除
- clear清空
十一,WeakMap
- 特点:key都是弱引用
十二,可迭代对象
- 可以被for of遍历
- String 字符串
- Array数组
- Set集合
- Map图
- keys()键集合
- values()值集合
- entries()键与值的集合
- for of
for(let v of arr){
console.log(v)
}
十三,异步与等待 asnc与await
async function say(){
return "abc"
}
say()
.then(res=>{})
- await
- 只能在async函数里使用,当函数遇到await等待wait结果,再往下执行
async function doit(){
var m1 = await say("msg",1000)
var m2 = await say("msg2",2000)
return m1+m2
}
doit()
.then(res=>consol.log(res)
十四,Symbol
- 符号:不重复;不可修改
var sym = Symbol(“标识”)
- 可以是sym作为唯一的key或者标识符 {sym:“abc”}
十五,迭代器
可迭代对象都拥有迭代器(可以被for of遍历的对象都是可迭代对象) String Array Set Map
获取迭代对象
var itr = arr [Symbol.iterator]()
通过next方法进行迭代
itr.next()(value:"XXX",done:false)
......
(value:undefined,done:true)
十六,生成器
普通函数前添加*,通过yield关键来控制生成,最终通过函数执行 返回一个可迭代元素
function *range(start,end,step){
while(start<step){
yield start
start+=step
}
}
生成一个1-100的可迭代元素
var list = range(1,100);
转换为数组
list=[...list]
当函数执行到yield关键字会等待
十七,代理 Proxy
对原对象操作的挟持
obj = {
msg :''你好 Vue‘’
}
o.msg 会执行get方法
o.msg = "abc" 会执行set方法
我们可以在get和set方法里面做一些判断劫持等其他操作
console.log(o.msg)
获取o的msg值 执行o里面的get方法 return obj[''msg'']
o.msg="abc
设置o里面msg值 执行o代理的set方法
obj.["msg"]="abc"