1. let和const
let:用于声明变量
const:用来定义不可改变的常量
let和var声明变量的区别:
- let不存在变量提升现象
- let存在块级作用域
- let声明之后必须赋值
- 全局变量声明时与顶层属性分离
2. 数组方法
filter
该方法创建一个新数组,新数组中返回符合条件的所有元素。
forEach
该方法遍历每一个元素并为其执行方法。
map
该方法返回一个新数组,数组内元素为原始数组元素执行方法后的映射。
findIndex
该方法返回符合条件的第一个数组元素的下标。
Array.from
该方法将一个类数组对象或者可遍历对象(如set或map)转换为数组。
类数组对象:
对于一个普通的对象来说,如果它的所有property名均为正整数,同时也有相应的length属性,那么虽然该对象并不是由Array构造函数所创建的,它依然呈现出数组的行为,在这种情况下,这些对象被称为“类数组对象”。
3.对象方法
Object.assign
该方法将两个对象合并成一个对象,并返回目标对象。
假如两个对象有相同属性名,后面的将会覆盖前面的。
Object.keys
该方法返回一个对象内所有的属性组成的数组。
Object.value
该方法返回一个对象内所有的属性值组成的数组。
Object.freeze
该方法将会冻结一个对象,被冻结的对象不能被修改。
3.函数
ES6中引入了箭头函数,可以替代绝大多数的匿名函数。
ES5中的匿名函数:
使用箭头函数:
以上两种写法,函数运行结果是一样的。
箭头函数解决了ES5中匿名函数的this指针方向不明确的问题。
因为箭头函数没有自己的this指针,所以它将会绑定上一级的this指针。
不使用箭头函数的写法:
4.解构赋值
数组的解构赋值
对象的解构赋值
5.模板字符串
在ES5中,字符串中想拼接变量是很麻烦的:
在ES6中提供了用斜引号包裹起来的模板字符串,其中变量用${}括起来。
这样想用字符串拼接变量就十分方便了:
6.import和export
export
ES6中每一个文件可以看作为一个模块,模块中的变量、对象或函数都可以通过export关键字导出在别的文件中使用。
//导出变量
export var a=1;
//导出对象
var a={
name:"Marcus",
age:19
};
//一定要写花括号!
export {a};
//导出函数
function b(){
...
}
export{b};
//导出默认对外接口
var i=1;
export default i;
import
如果模块中使用了export导出,那么在另一个文件中可以使用import关键字导入这些被暴露的函数或对象,在当前文件中使用。
import a from ‘./test.js';
console.log(a);
注意:import和export都只能在模块的顶部出现!不然会报错!
import和export也不能出现在循环或选择语句中。
7.Set和Map
Set
Set是ES6中新的数据类型。set允许存储任意对象的唯一值,无论是原始值还是引用。
Set对象是值的集合,即Set中的元素是唯一的。
Set最常用来进行数组去重,因为set对象类型中每个元素都是唯一的:
除了数组之外,字符串类型也可以变成Set对象(也可去重):
Map
Map是ES6中新的数据类型,Map与Object非常相像,唯一不同的是,Object中的键名只允许使用字符串,而Map中的键名可以是任意类型(包括对象)。Map提供了“值 — 值”的映射,是一种更完善的数据类型。
可以使用keys()和values()方法获得键名或键值。
8.class
许多编程语言都实现了class,js在ES6中才真正实现了class的语法糖。
在ES6还没出来之前,对象的方法是写在原型上面的:
//定义一个构造函数,把属性写到这里面
function rect(x,y){
this.width = x ;
this.height = y ;
}
//将方法写在该构造函数的原型上面
rect.propertype.area=function(){
return x * y;
}
在ES6中:
class rect {
constructor(x,y){
this.width = x;
this.height = y;
}
//这里不用function关键字
area(){
return x * y;
}
}
class可以通过extends关键字来进行继承。
class colorRect extends rect{
constructor(x,y,color){
//使用super关键字来调用父类的构造函数
super(x,y);
this.color=color;
}
colorArea(){
return this.color;
}
子类中必须使用super调用父类的函数才能得到与父类同样的构造函数和方法。
类的静态方法不能被实例继承,但是可以被子类继承。