let/var
相同点:在全局声明的变量是全局变量,在局部声明的变量是局部变量
不同点:1、let声明的变量不能重复声明
2、let声明的变量不能提升
3、let声明的变量只在当前块作用域中有效
4、let声明的变量产生暂时性死区,只在当前块作用域中找
const: 1、const声明的变量是常量,不能改变
2、const声明的变量必须赋初值
// 与let一样
3、const声明的变量不能重复声明
4、const声明的变量不能提升
5、const声明的变量只在当前块作用域中有效
6、const声明的变量产生暂时性死区,只在当前块作用域中查找
什么是解构赋值:将数组中的元素,字符串中的字符,对象中的属性分解成一个个的变量
对象的解构赋值,变量名必须和属性名保持一致
**解构赋值的作用:**1.交换两个变量
2.函数返回值可以返回多个变量
3.解决形参undefined的问题
**字符串的用法**:1、**模版字符串 (表达式 函数的调用 变量)**
2、**repeat( )函数:将目标字符串重复N次,返回一个新的字符串,不影响目标字符串。**
**3、includes()函数:判断字符串中是否含有指定的子字符串,返回true表示含有和false表示未含有。第二个参数从索引开始查找**
4、**startsWith( )函数:判断指定的子字符串是否出现在目标字符串的开头位置**
5、**endsWith( )函数:判断子字符串是否出现在目标字符串的尾部位置**
**String.raw函数 (了解 模板字符串)**
**数组的用法:**1、**Array.of函数 函数作用:将一组值,转换成数组。**
2、**Array.from函数 函数作用:可以将类似数组的对象或者可遍历的对象转换成真正的数组。**
**深拷贝 传值**
**3、find函数 函数作用:找出数组中符合条件的第一个元素。**
4、**findIndex函数 函数作用:返回符合条件的第一个数组成员的索引。**
5、**fill函数 函数作用:用指定的值,填充到数组。会改变原数组**
6、**entries函数 函数作用:对数组的键值对进行遍历,返回一个遍历器,可以用for..of对其进行遍历。**
7、**keys函数 函数作用:对数组的索引键进行遍历,返回一个遍历器。**
8、**values函数 作用:对数组的元素进行遍历,返回一个遍历器。**
**数字类型的用法:**1、**Number.isNaN函数:用于判断传入的是否是非数值,(NaN)(不会隐式类型转换)**
2、**Number.isFinite函数:用来检查一个数值是否非无穷。(有限的) 有限的 返回true(不会隐式类型转换)**
3、**Number.parseInt函数 parseInt函数:解析一个字符串,返回一个整数。**
4、**Number.isInteger函数:用来判断是否是整数。(不会隐式类型转换)**
5、 **Math.trunc函数:用于去除一个数的小数部分,返回整数部分。**
6、**Math.sign函数:用来判断一个数到底是正数 1、负数 -1、还是零 0。**
对象的使用:
1、如果对象的属性名和变量名一样,可以省略对象的属性值。
2、可以省略:function(在对象函数中)
3、表达式可以作为对象的属性名
1.Object.assign(目标对象,源对象,源对象)函数 函数作用:将源对象的属性赋值到目标对象上。(会覆盖)
2、Object.is函数 函数的作用:比较两个值是否严格相等,或者说全等 ===
3、Object.getPrototypeOf函数 函数作用:获取一个对象的prototype属性。
4、Object.setPrototypeOf(实例化对象,{})函数 函数作用:设置一个对象的prototype属性。
**参数的默认值(也可以解决形参undefined):**1、解构赋值
2、逻辑运算符 (重点)
3、赋初值
rest参数,这是一个新的概念,rest的中文意思是:剩下的部分。
**扩展运算符: …数组/对象 可以:**1、遍历数组
2、当做数组中的元素
**3、深拷贝 **
4、函数的调用
5、与解构赋值结合
6、转换成真正的数组
7、对象 扩展运算符
箭头函数的用法:将function去掉,在()后面加上=>
箭头函数的特点:
1、箭头函数只有一个参数可以省略小括号
2、在函数体中只有return返回语句,return和{}可以省略
3、箭头函数没有内置对象arguments
4、箭头函数不能写构造函数
5、箭头函数没有原型属性 prototype
6、箭头函数call,apply方法可以进行调用,不会改变this指向
7、箭头函数this指向父作用域(定义它的地方)
Symbol的初衷:解决对象的属性名冲突。
4、Object.getOwnPropertySymbols函数 获取对象中Symbol属性名
5、Reflect.ownKeys函数 获取所有的属性
6、Object.keys() Object.values() 获取对象中除了Symbol的属性
7、Symbol.for函数 函数作用:根据参数名,去全局环境中搜索是否有以该symbol.for()参数为名的symbol值,有就返回它,没有就以该参数名来创建一个新的symbol值。
proxy()的作用:
1.代理
2.解决跨域问题
中介 new Proxy(target,handler)
target:要拦截的目标对象
handler:定制拦截的行为(方法)(函数) 也是一个对象
1.for循环 弊端:代码不简洁
2.foreach 弊端:不能终端循环
3.for…in 弊端:索引是字符串类型
for…of特点:
1.代码简洁
2.终端循环
3.索引是number类型
4.索引和值可以分开遍历
可遍历的对象:for…of可以遍历的数据类型,数组,伪数组,字符串,Set, Map.
一、for…of为什么不能遍历对象
因为对象的构造函数中没有Symbol类型的属性 Symbol.iterator
iterator遍历器(迭代器)原理:当可遍历对象被for…of遍历的时候,Symbol.iterator就会被调用,返回一个iterator对象。
三、for…of遍历的原理:
当可遍历对象被for…of遍历的时候,Symbol.iterator就会被调用,返回一个iterator对象,
iterator里面的next()方法一直被调用,返回一个对象,里面有value,done属性,
直到done属性的属性值变成true,结束循环。
generator函数的作用:异步操作
1、声明Generator函数: function
2、调用 先产生一个iterator遍历器对象,里面有一个next()方法,进行调用在返回一个对象有value done value是yield后面的值
return yield区别
return 结束执行 后面的语句不会执行,是函数的返回值
yield 暂停执行 调用next()方法就会继续执行
next( )方法还可以接受一个参数,它的参数会作为上一个yield的返回值
我们想调用另一个Generator函数,就需要用到的关键字是:yield
类的作用: 生成一个对象,可以被继承
默认有一个构造方法 this指向实例化对象
自定义方法 this指向实例化对象
静态方法 实例化对象不能调用 需要用类调用,this指向当前类
ES6使用extends关键字来实现子类继承父类,