es6常用方法

xiaoxiao2021-02-27  143

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); // 1 console .log(bar); // 2 console .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 类型包含一组有序的键值对,其中键和值可以是任何类型。 Map创建也是使用Map构造函数 向Map存储键值对使用set(key, value);方法 可以使用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 你只能在派生类中使用 super(),否则(没有使用 extends 的类或函数中使用)一个错误会被抛出。 你必须在构造函数的起始位置调用 super(),因为它会初始化 this。任何在 super() 之前访问 this 的行为都会造成错误。也即是说super()必须放在构造函数的首行。 在类构造函数中,唯一能避免调用 super() 的办法是返回一个对象。 如果在子类中声明与父类中的同名的方法,则会覆盖父类的方法。(这种情况在其他语言中称之为 方法的覆写、重写 ) 如果在子类中又确实需要调用父类中被覆盖的方法,可以通过super.方法()来完成。
转载请注明原文地址: https://www.6miu.com/read-16686.html

最新回复(0)