Maison > interface Web > Questions et réponses frontales > Quelles sont les principales fonctionnalités d'es6

Quelles sont les principales fonctionnalités d'es6

青灯夜游
Libérer: 2022-04-19 19:28:21
original
3076 Les gens l'ont consulté

Les principales fonctionnalités d'es6 sont : 1. Utilisez le mot-clé Class pour créer une classe, puis créez un objet en instanciant la classe ; 2. La fonction flèche, utilisée pour simplifier l'écriture des fonctions de rappel ; peut être obtenu à partir d'un tableau selon un certain modèle Extraire les valeurs de et les objets et attribuer des valeurs aux variables ; 4. Boucle "For...of", utilisée pour parcourir les données, les tableaux et les objets de type tableau.

Quelles sont les principales fonctionnalités d'es6

L'environnement d'exploitation de ce tutoriel : système Windows 7, ECMAScript version 6, ordinateur Dell G3.

Fonctionnalités principales de l'ES6

1. Classe Classe

ES6 permet officiellement au Mot-clé Classe de créer une "classe", <code>crée ensuite <code>"objet" en instanciant "classe". Une classe résume les parties publiques d'un objet, et un objet spécifique peut être obtenu en instanciant la classe. ES6正式启用 Class 关键字创建"类”再通过实例化"类”来创建“对象”类抽象了对象的公共部分,通过实例化类可以得到一个具体的对象

  • 类名首字母使用大写
  • 实例化类必须使用 New 关键字
  • 简化面向对象的封装、继承、多态
  • 关键字 extends 可以用于创建一个子类
  • 类的 Constructor 函数,可以接收实参,并返回实例对象
  • 子类继承父类后,可以调用父类的方法,也可重写父类的方法(优先调用)
  • 关键字 super 用于访问和调用对象父类上的函数构造函数普通函数皆可。
  • 使用 New 创建实例时自动调用 Constructor 函数如果不写此函数类函数会自动生成
  • 【注】子类构造函数中使用super必须放到 this 前面,即先调用父类的构造方法再使用子类构造方法
// 1.使用Class关键字创建类
class 类名 {
    // 自有属性
    constructor(形参1, 形参2, ...) {
        this.属性名1 = 形参1;
        this.属性名2 = 形参2;
        ...
    }
    // 共有属性
    init() {
        函数体;
    }
    ...
}

// 2.利用类结合New关键字实例化对象
let Object = new 类名(实参1, 实参2, ...);

// 3.在已有类基础上创建子类
class 子类 extends 类名 {
    // 自有属性(与父类相同)
    constructor(形参1, 形参2, 新形参1...) {
        //super函数调用父类的constructor
        super(形参1, 形参2, ...);
        // 子类新增属性需要单独定义
        this.新属性1 = 新形参1;
        ...
    }
    // 共有属性(子类函数位于自身父级原型上,优先调用,父类同名函数在更上层原型链上)
    init() {
        函数体;
    }
    ...
}
Copier après la connexion

2、箭头函数

  • 箭头函数用于简化回调函数书写
  • 事件中简化箭头函数需要注意 this 指向为 window
  • 操作方法省略function,在 () 和 {} 间添加 =>单形参省略 ()单语句函数体省略 {},若单语句为 return 语句直接省略 {} 和 return
  • 箭头函数可以与变量解构结合使用。
  • 由于大括号被解释为代码块,如果箭头函数直接返回对象,必须在对象外面加.上括号,否则会报错。

注意事项

  • 箭头函数没有自己的this对象
  • 无法使用yield命令,因此箭头函数不能用作Generator函数。
  • 无法当作构造函数,即不能对箭头函数使用new命令,否则报错。
  • 无法使用arguments对象,该对象在函数体内不存在,可以用rest参数代替。
  • 第一个场合是定义对象的方法,且该方法内部包括this。
  • 第二个场合是需要动态this的时候,也不应使用箭头函数
  • 箭头函数内部,还可以再使用箭头函数。下面是一 个ES5语法的多重嵌套函数。

3、解构赋值

解构赋值即解析结构再赋值,ES6允许按照一定模式从数组和对象中提取值对变量进行赋值,这被称为解构(Destructuring),这种写法属于"模式匹配",只要等号两边模式相同左边的变量就会被赋予对应的值

数组解构赋值

  • 如果等号的右边数据不可遍历结构则会报错
  • 完全解构等号左右两边的结构完全相同,就会解析结构一一对应赋值
  • 不完全解构:等号左边的模式只匹配一部分的等号右边的数组依旧可以解构成功
  • 解构赋值允许指定默认值ES6内部使用严格相等运算符(===)判断某一位置是否有值,只有数组成员严格等于 undefined 默认值才会生效
    • La première lettre du nom de la classe doit être majuscule.
  • Les classes instanciées doivent utiliser le Nouveau mot-clé.
  • Simplifier encapsulation, héritage, polymorphisme orienté objet.

  • Mots clés extends peut être utilisé pour créer une sous-classe.
  • La Fonction Constructeur d'une classe peut recevoir des paramètres réels et retourner des objets d'instance.
  • Une fois qu'une sous-classe a hérité d'une classe parent, elle peut appeler les méthodes de la classe parent, ou remplacer les méthodes de la classe parent (en les appelant d'abord)</ code >. </p><li><code>Keyword super est utilisé pour accéder et appeler des fonctions sur la classe parent de l'objet, le constructeur et < code>Fonctions ordinaires sont acceptables. 🎜
  • Lors de l'utilisation de New pour créer une instance, la fonction Constructeur sera automatiquement appelée Si vous n'écrivez pas cette fonction, la fonction Constructeur sera automatiquement appelée. La fonction de classe sera automatiquement générée . 🎜
  • [Note] Lorsque sous-classe utilise super dans le constructeur , <code>doit être placé devant ceci, c'est-à-dire appelle le constructeur de classe parent en premier , puis utilise le constructeur de sous-classe. 🎜🎜🎜
    // 函数参数支持解构赋值
    function sum([x, y]) {
        return x + y;
    }
    
    // 传入参数时,数组参数解构为x与y
    sum([1, 2]);
    Copier après la connexion
    Copier après la connexion
    🎜🎜🎜2. La fonction flèche 🎜🎜🎜🎜
    • Fonction flèche est utilisée pour l'écriture de la <code>fonction de rappel simplifiée >. 🎜
    • Les fonctions fléchées simplifiées dans les événements doivent noter que cela pointe vers la fenêtre. 🎜
    • Méthode de fonctionnement : Omettre la fonction, ajouter => entre () et {}, <code>omettre un seul paramètre formel ( ), Omit {} dans le corps de la fonction d'une seule instruction si l'single instruction est une instruction return, directement omit {} et return. . 🎜
    • Les fonctions fléchées peuvent être utilisées conjointement avec la déstructuration de variables. 🎜
    • Étant donné que les accolades sont interprétées comme des blocs de code, si la fonction flèche renvoie directement un objet, vous devez ajouter des parenthèses supérieures à l'extérieur de l'objet, sinon une erreur sera signalée. 🎜🎜🎜🎜🎜Notes🎜🎜🎜
      • La fonction flèche n'a pas son propre objet this. 🎜
      • La commande rendement ne peut pas être utilisée, les fonctions fléchées ne peuvent donc pas être utilisées comme fonctions génératrices. 🎜
      • Ne peut pas être utilisé en tant que constructeur, c'est-à-dire que la nouvelle commande ne peut pas être utilisée pour les fonctions fléchées, sinon une erreur sera signalée. 🎜
      • L'objet arguments ne peut pas être utilisé. L'objet n'existe pas dans le corps de la fonction et peut être remplacé par des paramètres rest. 🎜
      • La première occasion est de définir la méthode de l'objet, et la méthode l'inclut en interne. 🎜
      • La deuxième occasion est que lorsque a besoin d'une dynamique, les fonctions fléchées ne doivent pas être utilisées. 🎜
      • Vous pouvez également utiliser les fonctions fléchées à l'intérieur des fonctions fléchées. Vous trouverez ci-dessous une fonction imbriquée multiple dans la syntaxe ES5. 🎜🎜🎜🎜🎜🎜3. Affectation de déstructuration 🎜🎜🎜🎜🎜L'affectation de déstructuration signifie analyser la structure puis attribuer la valeur ES6 permet selon un certain modèle, <. code>des tableaux et des objets Extraire les valeurs de et attribuer des valeurs aux variables C'est ce qu'on appelle la Déstructuration. "pattern matching" >, tant que le mode des deux côtés du signe égal est le même, la variable sur le côté gauche de se verra attribuer la valeur correspondante< /code>. 🎜🎜🎜🎜Affectation de déstructuration de tableau🎜🎜🎜<ul><li>Si la <code>donnée à droite du signe égal est une structure non traversable, un < code>erreur sera signalé. 🎜
      • Déconstruction complète : Les structures sur les côtés gauche et droit du signe égal sont exactement les mêmes, et les structures seront analysées et attribuées à des valeurs ​​un par un. 🎜
      • Déconstruction incomplète : Le motif sur le côté gauche du signe égal , ne correspond qu'à une partie du tableau sur le côté droit du signe égal< /code>, <code> fonctionne toujours Déconstruction réussie. 🎜
      • L'affectation de déstructuration permet de spécifier une valeur par défaut, ES6 interne utilise l'opérateur d'égalité stricte (===) pour déterminer s'il existe une valeur à un certaine position</code >, la valeur par défaut ne prendra effet que si les <code>membres du tableau sont strictement égaux à undefined. 🎜🎜🎜🎜🎜Déstructuration et affectation d'objets🎜🎜
        • 如果解构失败变量的值等于 undefined
        • 对象属性没有次序,但变量必须与属性同名,才能解析到正确的值
        • 对象解构可以指定默认值,默认值生效的条件是对象的属性值严格等于undefined
        • 对象解构时,由于JavaScript引擎会将{}理解成一个代码块,从而发生语法错误需要将整个解构赋值语句放在圆括号()里面,即可正确执行。

        字符串解构赋值

        • 字符串支持解构赋值,此时字符串被转换成了类数组对象
        • 类数组对象都有一个Length属性,因此可以对这个属性解构赋值

        函数参数解构赋值

        // 函数参数支持解构赋值
        function sum([x, y]) {
            return x + y;
        }
        
        // 传入参数时,数组参数解构为x与y
        sum([1, 2]);
        Copier après la connexion
        Copier après la connexion

        圆括号使用注意

        • 函数参数禁用圆括号。
        • 变量声明语句禁用圆括号。
        • 赋值语句的模式匹配部分禁用圆括号。
        • 只有赋值语句的非模式匹配部分可以使用圆括号

        4、For…of 循环

        • 优点,支持Break,Continue 和 Return关键字, for-of循环用于遍历数据、数组、类数组对象
        • 缺点,没有提供下标不能修改原数组只能遍历索引数组不能遍历 Hash 数组(对象)
        for (value of arr) {
            执行操作;
        }
        Copier après la connexion

        Iterator

        一种新的遍历机制,拥有两个核心。

        1. 迭代器是一个接口,能快捷的访问数据,通过Symbol.iterator来创建迭代器,通过迭代器的next()方法获取迭代之后的结果。
        2. 迭代器是用于遍历数据结构的一个指针(类似于数据库的游标)

        5、数值新增方法

        Number.isInteger()

        • Number.isInteger(),用来判断数值是否为整数
        • 如果参数不是数值返回false
        • JavaScript内部整数和浮点采用同样的储存方法,所以25和25.0视为同一个值
        • JavaScript数值存储64位双精度格式数值精度最多可以达到53个二进制位(1个隐藏位与52个有效位),如果数值的精度超过这个限度第54位及后面的位就会被丢弃方法失效

        Math.trunc()

        • Math.trunc()方法用于去除一个数的小数部分返回整数部分
        • 对于非数值Math.trunc()内部使用Number方法将其先转为数值
        • 对于空值无法截取整数的值返回NaN
        // 低版本浏览器兼容语法
        Math.trunc = Math.trunc || function (x) {
            return x < 0 ? Math.ceil(x) : Math.f1oor(x);
        };
        Copier après la connexion

        Math.sign()

        • Math. sign()方法用来判断一个数到底是正数、负数、还是零
        • 如果参数是非数值,会自动转为数值,对于无法转为数值的值,会返回NaN
        • 它会返回五种值,参数为正数返回+1,参数为负数返回-1,参数为0返回0,参数为-0返回-0其他值返回NaN

        6、字符串新增方法

        模板字符串

        模板字符串用于简化字符串拼接,模板字符串支持解析变量、换行、调用函数

        模板字符串(template string)是增强版的字符串,用反引号标识,可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

        `文本${变量}文本${变量}文本`
        Copier après la connexion

        includes()、startsWith()、endsWith()

        • includes(),返回布尔值,表示是否找到了参数字符串。
        • startsWith(),返回布尔值,表示参数字符串是否在原字符串的头部。
        • endsWith(),返回布尔值,表示参数字符串是否在原字符串的尾部。
          -【注】这三个方法都支持第二个参数,表示开始搜索的位置。

        padStart()、padEnd()

        ES2017引入了字符串补全长度功能,padstart() 用于头部补全,padEnd() 用于尾部补全。

        • padstart() 和 padEnd() 共接受两个参数,第一个参数是字符串补全生效的最大长度第二个参数是用来补全的字符串,如果省略第二个参数,默认使用空格补全长度。
        • 如果原字符串的长度等于或大于最大长度,则字符串补全不生效,返回原字符串。
        • 如果用来补全的字符串与原字符串两者的长度之和超过了最大长度,则会截去超出位数的补全字符串。
        • padstart()的常见用途是为数值补全指定位数,也可以用于提示字符串格式。
        // 补全长度方法提示字符串格式
        &#39;12&#39;.padStart(10, &#39;YYYY-MM-DD&#39;); // "YYYY-MM-12"
        &#39;08-31&#39;.padStart(10, &#39;YYYY-MM-DD&#39;); // "YYYY-08-31"
        Copier après la connexion

        trimStart()、trimEnd()

        trimStart()消除字符串头部的空格,trimEnd()消除字符串尾部的空格,它们返回的都是新字符串,不会修改原始字符串,两个方法对字符串头部(尾部)的tab键、换行符等不可见的空白符号也有效。

        repeat()

        • repeat方法表示将原字符串重复n次,返回一个新字符串。

        replaceAll()

        ES2021引入了replaceAll()方法,可以一次性替换所有匹配,它的用法与 replace()相同,返回一个新字符串,不会改变原字符串。

        7、对象新增方法

        • 在ES6中,可以直接在对象中写入变量,key相当于变量名,value相当于变量值,并且可以直接省略value,通过key表示一个对象的完整属性。
        • 除了属性可以简写,函数也可以简写,即省略掉关键字function。

        Object.is()

        它用来比较两个值是否严格相等,与严格比较运算符(===) 的行为基本- -致。

        console.log(Object.is(+0, -0)); //false
        console.log(Object.is(NaN, NaN)); //true
        Copier après la connexion

        Object.assign()

        • object. assign()方法用于对象的合并,将源对象(source) 的所有可枚举属性,复制到目标对象(target) 。
        • obiect. assign()方法的第一个参数是目标对象.后面的参数都是源对象。注意,如果目标对象与源对象有,同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。

        8、数组新增方法

        Array.from()

        • Array.from()用于将类数组对象可遍历对象(包括Set和Map)转为真正的数组
        • Array.from()方法还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

        Array.of()

        • Array.of()用于将一组值转换为数组
        • Array. of()返回参数值组成的数组如果没有参数返回一个空数组
        • 此方法可以弥补数组构造函数Array()因为参数个数的不同的差异
        • Array.of()基本上可以替代Array()或new Array(),它不存在由于参数不同导致的重载
        // 兼容版本Arrayof()方法
        function Arrayof() {
            return Array.prototype.slice.call(arguments);
        }
        Copier après la connexion

        数组实例的fill()

        • fill()方法使用给定值填充一个数组
        • 用于空数组的初始化非常方便。数组中已有的元素会被全部抹去
        • 方法支持第二个第三个参数,用于指定填充的起始位置结束位置
        • 如果填充的类型为对象,那被赋值的是同一个内存地址的对象而不是深拷贝对象

        数组实例的find()

        • 用于找出第一个符合条件的数组成员,如果没有找到返回undefined。

        findIndex()

        • 用于找出第一个符合条件的数组成员的位置,如果没有找到返回-1。

        includes()

        • 表示某个数组是否包含给定的值,返回布尔值。

        9、Let & Const

        ES6中,除了全局和局部作用域,新增了块级作用域

        Let

        • 语法:let 变量名 = 变量值;
        • let禁止相同作用域内重复声明同一个变量,所以不能在函数内部重新声明参数
        • let声明的变量只在 let 命令所在的代码块内有效,带有{块级作用域}不会导致声明提升,可以记录触发鼠标事件元素的下标

        Const

        • 语法:const 常量名 = 常量值;
        • 常量不占内存空间常量名一般使用纯大写
        • const声明变量必须立即初始化不能留到以后赋值
        • const声明的常量只在所在的块级作用域内有效,带有{块级作用域}不会导致声明提升,同样存在暂时性死区,且同一常量禁止重复声明,常量值无法改变
        • const声明的变量,可以保证变量的内存地址不变,对于简单类型的数据来说相当于常量,对于引用类型的数据只能保证其内存地址中指向实际数据的指针不变,而无法保证数据结构不变将对象声明为常量需要特别注意

        暂时性死区

        暂时性死区(TDZ)一种语法规则只要块级作用域内存在 let 或 const 命令内部声明的变量就会"绑定"这个区域,形成封闭作用域,即代码块内的变量必须先声明再使用

        10、模块化开发

        • 用于分工合作,每一个js都是一个模块,每个工程师都可以单独开发自己的模块,主模块最后引入调用
        • 1、子模块要公开暴露
          export var obj={};
          2、主模块引入并且使用
          import {obj as 别名} from “./文件路径”
          3、HTML页面引入时需要将type更换为module
        • ES6模块功能主要有两个命令构成,export和import,export用于规定独立的对外接口,import用于输入其他模块提供的功能,一个模块就是一个独立的文件,引入模块的script标签的type要设置为module。

        11、扩展运算符 & Rest运算符

        ES6中新增了扩展运算符Rest运算符,它们可以很好地解决函数参数和数组元素长度未知情况下的编码问题使得代码更加健壮简洁

        扩展运算符

        • 扩展运算符用3个点表示...
        • 作用:将数组类数组对象转换为用逗号分隔的值序列基本用法拆解数组和字符串
        // 1.扩展运算符代替apply()函数获取数组最大值
        let arr = [1, 4, 2, 5, 3];
        
        // apply()方法
        Math.max.apply(null, arr);
        // 扩展运算符方法
        Math.max(...arr);
        
        // 2.扩展运算符代替concat()函数合并数组
        let arr1 = [1, 2, 3];
        let arr2 = [4, 5, 6];
        
        // concat()方法
        arr1.concat(arr2);
        // 扩展运算符方法
        [...arr1, ...arr2];
        Copier après la connexion

        Rest运算符(剩余参数)

        • Rest运算符使用3个点表示...
        • 作用:与扩展运算符相反,用于将以逗号分隔的值序列转换成数组
        • 使用rest运算符进行解构时res运算符对应的变量必须放在最后一位否则变量无法识别读取多少个数值,就会抛出错误
        • 函数的参数是一个使用逗号分隔的值序列,可以使用rest运算符转换成数组代替arguments的使用。
        // 1.Rest运算符与解构组合使用拆分数组
        let arr = [1, 2, 3, 4, 5];
        // 将数组拆分,第一个元素赋值到arr1,其余元素赋值到arr2
        let [arr1, ...arr2] = arr;
        // 将数组拆分,前两个元素赋值到arr1与arr2,其余元素赋值到arr3
        let [arr1, arr2, ...arr3] = arr;
        
        // 2.Rest运算符代替arguments
        function sum(...arg) {
            // 获取形参数组
            console.log(arg);
        }
        // 传入形参
        sum(形参1, 形参2, ...);
        Copier après la connexion

        区分两种运算符

        • L'opérateur spread et l'opérateur rest sont les opérations inverses l'un de l'autre, l'opérateur spread consiste à diviser le tableau en séquences indépendantes , et opérateur de repos fusionne les séquences indépendantes dans un tableau. 扩展运算符和rest运算符互为逆运算扩展运算符将数组分割成独立的序列,而rest运算符将独立的序列合并成一个数组
        • 三个点出现在函数形参上赋值等号左侧,则为rest运算符
        • 三个点出现在函数实参上或赋值等号右侧,则为扩展运算符

        拓展 | Let、Var、Const区别

        • Let声明的变量,存在块级作用域不存在变量提升值可更改
        • Var声明的变量,存在函数作用域存在变量提升值可更改
        • Const声明的常量,存在块级作用域值不可更改
        • Lorsque trois points apparaissent sur les paramètres de fonction ou sur le côté gauche du signe égal d'affectation, il s'agit d'un opérateur de repos.

        Lorsque trois points apparaissent sur les paramètres de fonction ou sur le côté droit du signe égal d'affectation, il s'agit d'un opérateur étendu.

        • Extension | Différences entre Let, Var et Const

        Let déclare les variables, il y a une portée au niveau du bloc, Il n'y a pas de promotion variable, la valeur peut être modifiée.

        Variable déclarée par Var a une portée de fonction, une promotion de variable existe et la valeur peut être modifiée .

        La constante déclarée par Const a une portée au niveau du bloc et la valeur ne peut pas être modifiée.
        • Extension | ES6 cinq méthodes pour parcourir les propriétés de l'objet

        for…in
        • for…in est utilisée pour parcourir l'objet et ses propriétés énumérables propres et héritées (à l'exclusion des propriétés des symboles). La fonction

        Object.keys(obj)
        • Object.keys() renvoie un tableau contenant toutes les propriétés énumérables de l'objet lui-même, à l'exclusion des propriétés héritées et des propriétés de symbole. La fonction

        Reflect.ownKeys(obj)
        • Reflect.ownKeys(obj) renvoie un tableau, qui peut contenir des propriétés énumérées, des propriétés non énumérables et des propriétés de symbole, et n'inclut pas les propriétés héritées. La fonction

        Object.getOwnPropertyNames(obj)

        Object.getOwnPropertyNames(obj) renvoie un tableau contenant les propriétés énumérables et non énumérables de l'objet lui-même, à l'exclusion des propriétés héritées et des propriétés de symbole. La fonction

        🎜🎜🎜Object.getOwnPropertySymbols(obj)🎜🎜🎜🎜🎜Object.getOwnPropertySymbols(obj) renvoie un tableau qui contient toutes les propriétés Symbol de l'objet lui-même, à l'exclusion des autres propriétés. 🎜🎜🎜【Recommandations associées : 🎜tutoriel vidéo javascript🎜, 🎜front-end web🎜】🎜

        Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

  • Étiquettes associées:
    es6
    source:php.cn
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal