一、变量:let
介绍:在es5中,我们通常使用var声明一个变量,但是var有很多特性与常规的编程语言都不太相同,在es6中,又提供了与常规语言类似的声明变量的方法。let对比var有如下特点:
(1)变量声明不会被提升,即在变量声明之前无法使用该变量
(2)具有局部作用域,即let声明的变量只能在对应代码块中使用
(3)不允许重复声明。
二、const:用于声明常量,与let具有相同的特性。
其他特性:const声明的变量在声明的时候就需要赋值,并且只能赋值一次,不能修改。
三、解构(模式匹配)
介绍:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构,解构的本质属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。如果解构不成功,变量的值等于undefined。
1.数组解构:等号左边的变量放到中括号内部,匹配右侧数组中的元素。
let [a, b, c] = [1,2,3]
不完全解构:
let [a,[b],d] = [1,[2,3],4]; //a=1;b=2;d=4
集合解构:
let [a, ...b] = [1,2,3] // a=1;b = [2, 3]
默认值(当匹配值严格等于undefined时,默认值生效):
let [x,y=’b’] = [‘a’]; //x=’a’,y=’b’;
默认值也可以为函数:
let [a=myFun()] = [1]
2.对象解构:等号左边的变量放到大括号内部,匹配右侧数组中的元素。对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
let { foo, bar } = { foo:"aaa", bar: "bbb” }; //foo = "aaa"; bar = "bbb"
如果变量名与属性名不一致,必须写成下面这样:
var { foo: baz}= { foo: 'aaa', bar: 'bbb'}; //baz = "aaa"
这说明,对象的解构赋值是下面形式的简写:
let { foo: foo, bar: bar } = { foo: "aaa", bar: "bbb" };
嵌套解构:
let obj= { p: [ 'Hello', { y:'World' } ] };
let { p: [x, { y }] }= obj; //x = "Hello" ; y = "World"
默认值(默认值生效的条件是,对象的属性值严格等于undefined):
var {x: y = 3}={};
3.字符串解构
等号左边的变量如果放在中括号内进行的类似于数组解构,从字符串中获取指定字符;如果放在大括号内进行的类似于对象解构,从实例属性获方法中解构。
let { foo, bar }= { foo: 'aaa', bar: "bbb' }; // foo = "aaa"; bar = "bbb"
const [a, b, c, d,e] = 'hello'; //a=h;b=e;c=l;d=l;e=o
let {length : len, toString } = 'hello'; //len = 5
这个例子与数组解构相区别:数组解构是从字符串里提取字符
let [a, b, c] = 'hello'; a='h' b='e' c='l'
与对象解构区别:对象解构是从字符串原型中解构属性和方法
let { length, toString } = 'hello'
4.number解构
let { valueOf } = 12; //valueOf === Number.prototype.valueOf()
5.boolean解构
let { valueOf } = true; //valueOf === Boolean.prototype.valueOf()
四、对象
介绍:ES6中规定可以直接在对象中写入变量和函数作为对象的属性和方法,此时属性名为变量名,属性值为变量的值。对象简写在未来的使用频率极其高。
var name= 'terry';
var foo= {
name,
sayName(){
console.log('my name is',this.name);
}
};
2.对象API拓展:ES6中对于Object的拓展主要是静态方法的拓展
Object.is() 判断两个值是否一样
Object.assign() 将所有可枚举属性的值从一个或多个源对象分配到目标对象
Object.setPrototypeOf(obj1, obj2) 为目标对象设置原型
Object.getPrototypeOf() 获取目标对象的原型
Object.keys() 返回对象属性名组成的数组
Object.values() 返回对象属性值组成的数组
Object.entries() 返回对象[属性名, 属性值]组成的数组
五、数组
1.拓展运算符:使用 三个点’…’表示。好比rest参数的逆运算,将一个数组转为用逗号分割的参数序列。
...用在=左边,聚合的作用(对象、数组的结构)
...用在=右边,展开(剥离)的作用
let obj1 = {
name: '张三'
}
let obj2 = {
...obj1,
age: 12
}
2.数组API拓展
Array.from() 将其他类型属性转成数组
Array.of() 创建数组实例,实参就是数组的元素
Array.prototype.find() 返回满足条件的第一个元素
Array.prototype.findIndex() 返回满足条件的第一个元素的索引
Array.prototype.includes() 判断当前数组中是否包含某个元素
Array.prototype.fill() 填充数组(左右元素填充)
Array.prototype.keys() 索引的迭代器对象
Array.prototype.values() 元素的迭代器对象
Array.prototype.entries() 键值对的迭代器对象