es6常用方法

来源:互联网 发布:地图开疆 知乎 编辑:程序博客网 时间:2024/06/06 19:14
1.箭头函数=>
([函数的形参,多个参数则以逗号分隔]) => [函数返回的值/表达式]
箭头函数则会捕获其所在上下文的 this 值,作为自己的 this 值。这样就不需要利用闭包来保存this了。
2.let
自ES6,javascript开始拥有块级作用域,而let则是配合块级作用域,作为替代var的一个语法定义。
有了块级作用域,再也不用担心临时变量污染到外层的变量了:
3.const
const是用来定义常量的,一旦定义了就不可修改(一修改就报错)。用途嘛,也比较单一,就是定义一下配置项什么的,免得被团队里的愣头青写的代码给瞎改了。
4.destructuring
解构,按照一定模式,从数组和对象中提取值,对变量进行赋值
let [foo, [[bar], baz]] = [1, [[2],3]];console.log(foo);// 1console.log(bar);// 2console.log(baz);// 3
5.数组去重
Set是类似数组的一种结构,可以存储数据,与数组的区别主要是 Set中的元素不能重复,而数组中的元素可以重复
一句话总结:Set类型是一个包含无重复元素的有序列表。使用Set的 has() 方法可以判断一个值是否在这个set中。delete(要删除的值) :删除单个值
clear():清空所有的值
set()和Array.from()
var arr=[1,1,2,3,4,3,2];
var newArray=Array.from(new Set(arr))//[1,2,3,4]
6.ES6新增一个基本数据类型Symbol,用来创建私有成员。
Symbol 作为属性名,该属性不会出现在for…in、for…of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回。但是,它也不是私有属性,有一个Object.getOwnPropertySymbols方法,可以获取指定对象的所有 Symbol 属性名。
7. Map数据结构
ECMAScript 6 中的 map 类型包含一组有序的键值对,其中键和值可以是任何类型。
  1. Map创建也是使用Map构造函数
  2. 向Map存储键值对使用set(key, value);方法
  3. 可以使用get(key),来获取指定key对应的value
8.在ES6直接借鉴其他语言,引入了类的概念。
class PersonClass {
// 等效于 PersonType 构造函数。
constructor(name) { //这个表示类的构造函数。constuctor也是关键字必须小写。
this.name = name; //创建属性。 也叫当前类型的自有属性。
}
// 等效于 PersonType.prototype.sayName. 这里的sayName使用了我们前面的简写的方式。
sayName() {
console.log(this.name);
}
}
let person = new PersonClass("Nicholas");
person.sayName(); // 输出 "Nicholas"

console.log(person instanceof PersonClass); // true
console.log(person instanceof Object); // true

console.log(typeof PersonClass); // "function"
console.log(typeof PersonClass.prototype.sayName); // "function"
类声明和函数定义不同,类的声明是不会被提升的。类声明的行为和 let 比较相似,所以当执行流作用到类声明之前类会存在于暂存性死区(temporal dead zone)内。
类声明中的代码自动运行在严格模式下,同时没有任何办法可以手动切换到非严格模式。
所有的方法都是不可枚举的(non-enumerable),这和自定义类型相比是个显著的差异,因为后者需要使用 Object.defineProperty() 才能定义不可枚举的方法。
所有的方法都不能使用 new 来调用,因为它们没有内部方法 [[Construct]]。
不使用 new 来调用类构造函数会抛出错误。也就是 必须使用new 类() 的方式使用
试图在类的方法内部重写类名的行为会抛出错误。(因为在类的内部,类名是作为一个常量存在的
9.ES6中的继承,使用类和extends
class Father{
constructor(name){
this.name = name;
}
sayName(){
console.log(this.name);
}
}
class Son extends Father{ //extents后面跟表示要继承的类型
constructor(name, age){
super(name); //相当于以前的:Father.call(this, name);
this.age = age;
}
//子类独有的方法
sayAge(){
console.log(this.age);
}
}

var son1 = new Son("李四", 30);
son1.sayAge();
son1.sayName();
console.log(son1 instanceof Son); // true
console.log(son1 instanceof Father); //true
  1. 你只能在派生类中使用 super(),否则(没有使用 extends 的类或函数中使用)一个错误会被抛出。
  2. 你必须在构造函数的起始位置调用 super(),因为它会初始化 this。任何在 super() 之前访问 this 的行为都会造成错误。也即是说super()必须放在构造函数的首行。
  3. 在类构造函数中,唯一能避免调用 super() 的办法是返回一个对象。
如果在子类中声明与父类中的同名的方法,则会覆盖父类的方法。(这种情况在其他语言中称之为 方法的覆写、重写 )
如果在子类中又确实需要调用父类中被覆盖的方法,可以通过super.方法()来完成。