You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fuctionmyTagFunc(string,name,gender){console.log(string,name,gender)return'123'}//按照表达式分割的静态的内容,结果是一个数组conststr=myTagFunc`hey,${name} is a ${gender}`console.log(str)//123//tag是函数,作为一个模板标签constarr=console.log`world`
[toc]
ECMAScript
缩写ES
JavaScript是ES的扩展语言
ECMAScript只提供了最基本的语法,只停留在语言层面
JavaScript语言本身指的就是ECMAScript
ES2015
概述
ES6
asnyc2017标准
准备
let与块级作用域
全局作用域
函数作用域
块级作用域 {}
let 在所声明代码块外部无法访问
循环计数器 嵌套循环 是两层嵌套的独立作用域
var i重复 内部拿到的只是外部的i
var 全局作用域 闭包也可以摆脱影响
原有变量声明的提升,不报错,undefined
let被改正
const
恒量常量 只读
只要没有修改指向的内存地址,都是被允许的
特性与let相同
主用const,配合let,不用var
数组的解构
对象的解构
可以简化代码的编写,体积减小
模板字符串字面量
带标签的模板字符串
字符串的扩展方法
参数默认值
没有在传递参数或者传递undefined时使用的一个值
剩余参数
新增了...
取代argement
出现在最后一位,只能出现一次
展开数组
箭头函数
箭头函数与this
没有this的机制,不会改变this的指向,它始终指向的都是当前作用域里的this
this在外面是什么,在里面就是什么
在普通函数中,this始终会指向调用它的对象,箭头函数不然
对象字面量的增强
计算属性名
Object.assign
多个源对象的属性复制到一个目标对象中
也可以解决两个对象直接相等改变前者指向地址的问题
Object.is(对象扩展方法)
==自动转换数据类型
===严格比较
Proxy代理对象
Object.defineProperty捕获到对象读写的过程。Vue3.0前实现数据响应,完成双向数据绑定
Proxy VS. defineProperty
defineProperty只能监视属性的读写,Proxy 能够监视到更多对象操作
Proxy更好的支持数组对象的监视
以往重写数组的操作方法
Proxy是以非侵入的方式监管了对象的读写
Reflect
内部封装了一系列对对象的底层操作(13个)
Reflect成员方法就是Proxy处理对象的默认实现
如果在内部没有定义set get等方法,就默认调用了Reflect同名方法
意义:提供了统一一套用于操作对象的API
new Reflect()本身不可以对数据进行拦截
Promise
class 类
通过class
静态方法(static)
实例方法 vs. 静态方法
新增了添加静态成员的static关键词
需要注意this
类的继承(extends)
以前用原型
Set(集合)
内部成员不允许重复,重复添加会忽略
add forEach size(length) have delete clear
作用:为数组元素去重
Map
和对象类似,本质上是键值对集合,但键只能是字符串类型,
Map可以解决这样的问题
has delete clear forEach
symbol
一种全新的原始数据类型
避免对象属性名重复产生的问题
可以模拟实现对象的私有成员
为对象添加独一无二的属性名
特性:
唯一性 for
它维护的是字符串和smybol之间的关系,如果传参不是字符串,会自动转换为字符串
提供了很多内置的Symbol常量,作为内部方法的标识。可以去实现js中内置的接口。
但还是可以使用Object.getOwnPropertySymbol(obj)获取到obj中Symbol类型的属性名
for...of循环
遍历所有统一方式
伪数组也可
但普通对象Object无法被迭代
ES2015提供了Iterable接口,表示可迭代的。能实现Iterable接口就是for...of的前提(在内部已经实现了这个接口)
找原型对象,有Iterable的方法,必须挂载的
总结:需要返回带有next()方法的对象,不断调用next()方法实现对内部对象的遍历
实现可迭代接口(Iterable)
在对象内部实现迭代器
迭代器模式
意义:对外提供遍历统一接口,外部不用再关心内部的结构。语言层面实现,适用于任何结构。
生成器(Generator)
避免异步编程中回调嵌套过深问题
提供更好的解决方案
内部也有一个迭代器next方法
配合yield使用
总结:
生成器应用
使用Generator函数实现iterator方法
不用手动实现一个迭代器对象,直接使用循环yield去返回一个生成器的对象
ES Modules
ES2016
检查数组是否包含指定元素,能去查找NaN
arr.includes()
指数运算符
Math.pow(2 ** 10)
ES2017
Object.value()
返回对象中所有的值组成的数组
Object.entries()
返回对象中所有的键值对
Object.getOwnProperyDescriptors
完整地获取对象属性中的描述信息,配合ES中的get和set使用
String.prototype / String.prototype.padEnd
字符串填充方法。用给定的字符串去填充字符串的开始和结束位置,达到指定长度为止
在函数参数中添加逗号
Async / Await
The text was updated successfully, but these errors were encountered: