ES6
本文件已定稿,最后修改时间 20240723 01:56
一、ES6语法
let和const
let:声明变量
- let声明的变量只能在代码块内有效
- 不可以重复声明同一个变量
- 不存在变量提升
【面试题】let 和 var 的区别
- var声明变量可能不具有作用域,let声明变量有作用域
- var可以声明同一个变量(覆盖),let不可以
- var有变量提升,let没有
const:常量
- const声明的变量只能在代码块内有效
- 不可以重复声明同一个变量
- 不存在变量提升
【面试题】let 和 var 的区别
- var声明变量可能不具有作用域,const声明变量有作用域
- var可以声明同一个变量(覆盖),const不可以
- var有变量提升,const没有
数组和对象解构赋值
字符串和函数参数解构赋值
字符串的解构赋值
let [a,b,c] = 'hello';
// h e l函数参数的解构赋值
function fun([a,b]){
return a+b;
}
fun([10,20]);
字符串扩展
include()
:和indexOf
区别不大includes()
返回值是布尔类型 true|falseindexOf()
-1 || 下标startsWith()
:返回布尔值
表示参数字符串是否在原字符串的头部
endsWith()
:返回布尔值
表示参数字符串是否在原字符串的尾部
repeat
重复几次:
str.repeat(3)
padStart()
、padEnd()
补全:
str.padStart(2,'0')
:返回的字符串一共两位,不够在前面补0trimStart()
、trimEnd()
trim()
:去除前后空格trimStart()
:去除前空格trimEnd()
:去除后空格replaceAll()
:str.replace(/a/g,'?')
// 等价于
str.replace('a','?')
箭头函数
let fun = ([num1,num2])=>{
return num1+num2;
}
// 等价于
let fun = function(){
// 函数体
}如果是一个参数:
let fun = v=>{
// 函数体
}如果不加{},默认有return
let fun = v=>v;
箭头函数和普通函数的区别:
箭头函数不能new
箭头函数内部没有arguments对象
函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象,一般来说,箭头函数的this都基本指向于window对象
函数的扩展
数组的扩展
Array.from()
用于将两类对象转为真正的数组
Array.of()
用于将一组值,转换为数组
find()
和findIndex()
find()
查找(找到第一个),找到返回该成员,没有找到返回underfinedfindIndex()
查找(找到第一个),找到返回该下标,没有找到返回-1includes()
类似于indexOf找到返回true,没有找到返回false
flat()
:扁平化数组
对象的扩展
简单写法
let obj = {
run(){
}
}let str = 'foo';
let obj = {
str // str:str
}for…of语法可以遍历对象|数组
let obj = {
a:1,
b:2,
c:3
}
let arr = ['a','b','c','d'];
for(let k of Object.keys(obj)){
console.log(k);
}
for(let v of Object.values(obj)){
console.log(v);
}
for(let [key,val] of Object.entries(onj)){
console.log(key,val);
}
对象的新增方法
Object.is()
:判断是否相等主要是解决ES5之前的:==、===的问题
Object.assign()
【重要】合并对象
let obj1 = {
a:1
}
let obj2 = {
b:2
}
Object.assign(obj1,obj2);
console.log(obj1,obj2); // 将obj2的值赋值给obj1注:
Object.assign()
是浅拷贝,不是深拷贝
Class
class基本格式
function Person(options){
this.name = options.name;
}
Person.prototype.run = function(){
return 'run';
}
var obj = new Person({
name:'lisi'
});class Person{
constructor(name){
this.name = name;
}
run(){
return 'run'
}
foo(){
return 'foo'
}
}
let obj = new Person('lisi');
console.log(obj.name, obj.run(), obj.foo())类继承
class 子类 extends 父类 {
constructor(){
super();
this.属性名 = 值
}
方法1(){
}
方法2(){
}
}
Symbol和Set
symbol是一个独一无二的
symbol是新的原始数据类型
new Set()
:没有重复的值,去重
let set = new Set([1,2,3,4,3,4,3,4,2,1,9]);
console.log(set);【面试题】:有几种去重方式
- ES6的
new Set()
filter
- 判断逻辑的形式
- ES6的
Module的语法
Promise
Promise是异步编程的解决方案
- 功能:写异步的代码,同步的执行出来
- 好处:让代码更好的维护或者易读
同步:只有前一个任务执行完毕后,才能执行下一个任务
异步:不进入主线程,进入任务队列,只有任务队列通知主线程,某个异步任务可以执行,该任务才会进入主线程
【面试题】Promise有哪几种状态?
- pending(进行中)
- fulfilled(已成功)
- rejected(已失败)
function foo(){
return new Promise((res,rej)=>{
res();
})
}
foo().then(()=>{
return new Promise((res,rej)=>{
console.log(111);
res();
})
}).then(()=>{
return new Promise((res,rej)=>{
setTimeout(()=>{
console.log(222);
res();
})
})
}).then(()=>{
console.log(333);
})async和await
async函数返回的是Promise
如果单独使用await会报错,await需要在async中
function foo(){
return new Promise((res,rej)=>{
setTimeout(()=>{
res('hello');
})
})
}
async function fun(){
/*
console.log(111);
foo().then(v=>{
console.log(v);
return new Promise((res,rej)=>{
res();
})
}).then(()=>{
console.log(222);
})
*/
console.log(111);
let f = await foo();
console.log(f);
console.log(222);
}
fetch和mock
fetch
window对象下就有fetch ——-> 返回的是promise对象
fetch(url,{
metch:'get|post',
params:{} // 给后端传递的参数
}).then(data=>{
// 后端给前端返回的数据
data.json() // 把数据转换成对象的形式|格式
})fetch(url,{
method:'post'
}).then(async res=>{
let data = await res.json();
console.log(data.data);
})fetch-mock
如果目前没有接口,前端自己模拟数据
下载fetch-mock
npm install fetch-mock -S
引入模块
import fetchMock from 'fetch-mock'
基本格式
fetchMock.mock(url,函数)
import fetchMock from 'fetch-mock';
fetchMock.mock('/list',(url,params)=>{
// params前端给后端传递的数据
return {
a:1
}
})import './fetchMock'
fetch('/list',{
params:{
userName:'张三',
userPwd:'123456'
}
}).then(async res=>{
let data = await res.json();
console.log(data.data);
})