let
let 1、不能重复声明
2、块级作用域,只能在代码块访问
3、不存在变量提升,不是undefined,直接报错
4、不影响作用域链
const
声明常量,1、一定要赋初始值(一般大写)
2、常量的值不能修改
3、块级作用域
4、对数组和对象的元素的修改是可以的
解构赋值
模板字符串
上面是变量名的简写,key:value value是变量正巧和key名称一样就可以简写 key,
箭头函数
1、箭头函数中this是静态的,不能通过call和apply来改变 事件源,就像上面this指向触发事件的函数
2、不能作为构造函数实例化对象
3、没有arguments
4、只有一个参数可以省略小括号,代码只有一条语句可以省略花括号。它必须省略return,而且计算结果是函数的返回值。
默认的参数一般写在最后,上面这个和解构赋值一起用
rest参数
放到最后
扩展运算符
…数组可以将数组展开为参数序列,当函数参数传入
数组合并【…ayyray1,…array2】
数组浅克隆【…array】
symbol
1、值唯一,用来解决命名冲突问题
2、不能与其他数据进行计算
Iterator
自定义遍历数据
看文章吧
生成器函数
第二个next可以传递参数,用第一个yeild前面设置变量接收
生成器函数解决回调地狱问题:
function one() {
setTimeout(function () {
alert("1");
iterator.next();
},2000);
}
function two() {
setTimeout(function () {
alert("2");
iterator.next();
},2000)
}
function three() {
setTimeout(function () {
alert("3");
},2000)
}
function* begin() {
yield one();
yield two();
yield three();
}
let iterator = begin();
iterator.next();
Set
这个传入的参数不会重复
Map
calss
实例对象访问不到构造函数的属性和方法
class可以用static
继承
子类构造函数的prototype=new 父类
浮点数比较
eps那个代表最小精度
trunc是将小数点后面的数消除
Object
Object.is(NaN,NaN); 用来判断两个值是否相等
Object.assign(obj1,obj2)
上面这个是合并对象,如果两个对象有相同的属性,后面的会将前面的覆盖。
模块化
防止命名冲突,可以代码复用
html页面:
js页面:
import * as ff from "./02.js";
ff.f();
function f() {
alert("s");
}
var obj={}
export{f,obj};
解构赋值
Es7
数组的includes方法
Math.pow(3,5);
alert(2**5); //这个是x的几次幂
Es8
三个方法
有keys和values
Es9
rest参数和扩展运算符
function person(name,...user) {
user对象包含剩余参数
}
person("xiaoming",12,"ss")
对象合并类似数组合并
正则表达式的捕获命名分组
模式修正符s加了可以让 点 匹配任意字符
Es10
Object.fromEntries()//将二维数组转化为对象
str.trimStart();
str.trimEnd();
清除字符串前面和后面的空格
数组的flat(),默认参数是1可以传2,意思是将三维数组转换为1维
symbol对象新增加description属性可以获得传入的参数
Es11
class 中大属性前面加上#可以将属性变为私有
all方法,都成功他才会成功
按需加载,动态引入
globalthis
bigint类型是为了解决math.maxsafe 这最大安全数以上的运算