1.声明变量:
let 不允许在相同作用域内,重复声明同一个变量。
const 声明一个只读的常量。一旦声明,常量的值就不能改变。
*存在一个特殊情况,const声明的引用类型的类型,例如对象,对象的值是可以改变的,因为const声明的常量保存的是对象引用的地址。*
2.变量解构赋值:
默认值 默认值可以引用解构赋值的其他变量,但该变量必须已经声明。
对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
解构失败,变量的值等于undefined
字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象
let [a,b] = 'ha'
// a = h , b = a
同时可以获得字符串的长度:
let {length:len} = '12121'
// len = 5
函数参数的解构也可以使用默认值。
解构赋值的用途
- 交换变量的值
- 从函数返回多个值
- 函数参数的定义
- 提取JOSN数据
- 函数参数的默认值
- 遍历Map结构
- 输入模块的指定方法
3.箭头函数:
箭头函数的分类:
- 单语句,单参数
例如:a=>console.log(a) - 单语句,多参数
例如:(a,b)=>console.log(a+b) - 多语句,多参数.
例如:(a,b)=>{
let sum = 0;
sum = a + b;
return sum;
}
- 解决问题:
1.缩减代码
2.改变 this 指向,是定义时所在的对象,而不是使用时所在的对象。而且不可改变,不能使用call和bind改变箭头函数的this指向。
4.Symbol
S6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)
5.forEach()
forEach(): 没有返回值,本质上等同于 for 循环,对每一项执行 function 函数。即map是返回一个新数组,原数组不变,forEach 是改变原数组。
6.Rest:
Rest 参数接受函数的多余参数,组成一个数组,放在形参的rest参数只能写在最后,前面用…标识Spread操作符(…),也称作展开操作符,作用是将可迭代的(Iterable)对象进行展开。
7.模板字符串:
模板字符串使用反引号 () 来代替普通字符串中的用双引号和单引号。模板字符串可以包含特定语法(${})的占位符。占位符中的表达式和周围的文本会一起传递给一个默认函数,该函数负责将所有的部分连接起来,如果一个模板字符串由表达式开头,则该字符串被称为带标签的模板字符串,该表达式通常是一个函数,它会在模板字符串处理后被调用,在输出最终结果前,你都可以通过该函数来对模板字符串进行操作处理。在模版字符串内使用反引号(`)时,需要在它前面加转义符(\)。
8.class:
S6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。基本上,ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
9.class继承:
Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类自己的this对象,必须通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后对其加工,加上子类自己的实例属性和方法,如果不调用super方法,子类就得不到this对象。
10.super关键字
super这个关键字,既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同.
第一种情况,super作为函数调用时,代表父类的构造函数。ES6 要求,子类的构造函数必须执行一次super函数。
第二种情况,super作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类。
11.类的prototype属性和_proto_属性
子类的_prop_属性,表示构造函数的继承,总是指向父类。
子类prototype属性的_prop_属性,表示方法的继承,总是指向父类的prototype属性。
12.Typeof
typeof运算符用于判断对象的类型,但是对于一些创建的对象,它们都会返回’object’,有时我们需要判断该实例是否为某个对象的实例,那么这个时候需要用到instanceof运算符,后续记录instanceof运算符的相关用法。