📜  ES6简介

📅  最后修改于: 2021-05-20 08:26:09             🧑  作者: Mango

ES6或ECMAScript的2015年是6 ECMAScript的编程语言的版本。 ECMAScript是Javascript的标准化版本,于2015年发布,随后更名为ECMAScript 2015。

ECMAScript和Javascript本质上是不同的。

ECMAScript与Javascript

  • ECMAScript:这是ECMA-262中定义的用于创建通用脚本语言的规范,简单来说,它是用于创建脚本语言的标准化,由Ecma International引入,基本上是一种实现方法,我们可以通过该实现来学习如何创建脚本语言。
  • Javascript:一种符合ECMAScript规范的通用脚本语言,基本上是一种告诉我们如何使用脚本语言的实现。

ES6

Javascript ES6已经存在了几年,它使我们能够以一种聪明的方式编写代码,这基本上使代码更现代,更易读。因此,“少写多做”这一术语绝对适合ES6。
ES6引入了一些关键功能,例如const,let,箭头功能,模板字面量,默认参数等等,下面我们逐一介绍一下它们。

“ const”和“ let”

在ES6之前,我们主要在需要声明变量时使用var关键字,但是它存在一些严重的问题,也不是开发人员所喜欢的,因此在ES6版本中,我们引入了const和let关键字,该关键字允许我们存储变量它们都有自己的存储变量的方式。

  • const :const关键字主要用于存储其值将不会被更改的变量。以一个示例为例,您在创建一个Web应用程序时要存储一个其值将不会更改的变量,那么const肯定是存储该变量的最佳选择。在javascript中,const被认为比var更强大。曾经用于存储变量的变量不能被重新分配。简单来说,它是不可变的变量,除非与对象一起使用。

    范例

    // Const 
    const name = 'Mukul';
    console.log(name); // Will print 'Mukul' to the console.
      
    // Trying to reassign a const variable
    name = 'Rahul';
    console.log(name); // Will give TypeError.
    

    输出:

    在上面的代码中,我们用const关键字声明了一个变量名,然后console.log正常工作,但是用其他值重新赋值会产生错误。现在让我们来看一个使用const关键字声明对象的示例。

    // Object using const
    const person ={
        name:'Mukul Latiyan',
        age:'21',
        isPlaced:true
    };
      
    console.log(person.name); // 'Mukul Latiyan'
    person.name = 'Mayank';
      
    console.log(person.name); //'Mayank'
    

    输出:

    使用const关键字声明的对象的属性是可变的,就像在上面的代码中,我们声明的person对象具有一些属性,例如name,age,isPlaced 。当我们尝试访问属性时,一切都很好,当我们更改name属性时,它也能正常工作。因此,我们得出一个结论,即使用const关键字声明对象属性也是可变的。

  • let :如果使用let关键字,则声明的变量将是可变的,即可以更改值。它的工作方式与var关键字相似,但有一些关键区别,例如作用域设置,与var相比,它是更好的选择。

    // let
    let name = 'Mukul';
    console.log(name); // Mukul
      
    name = 'Rahul';
    console.log(name); // Rahul
    

    输出:

    对象也是可变的。喜欢:

    // Object using let
    let bike = {
        name : 'Ninja ZX-10R',
        engine:'998cc',
        abs : 'dual channel'
    };
      
    console.log(bike.engine); // 998cc
      
    bike.engine = '789cc';
    console.log(bike.engine); // 789cc
    

    输出:

箭头功能

箭头函数(也称为“胖箭头函数”)是一种用于编写函数表达式的更简洁的语法。在ES6中引入的箭头函数无疑是javascript中影响最大的更改之一。这些函数表达式使您的代码更易读,更现代。

// ES5
function printName(name){
    console.log('Hello '+name);
}
  
printName('Mukul'); // Hello Mukul

输出:

而不是使用此,使用下面的代码:

// ES6
const printName = name =>{
    return `Hi ${name}`; // using template literals
}
console.log(printName('Mukul')); // Hi Mukul
  
// We can also write the above code without 
// the return statement
const printName1 = name => `Hi ${name}`;
  
console.log(printName1('Mukul')); // Hi Mukul

输出:

模板字面量

模板字面量是ES6的一项功能,与ES5及以下版本相比,它使我们能够以更好的方式使用字符串。通过简单地使用模板字面量,我们可以提高代码每当我们想连接字符串,也当我们想用一个字符串,它绝对不是一个推荐method.Template内部变量readability.Before ES6我们利用“+”运算符字面量使用反引号(“),而不是常规字符串使用的单引号或双引号。

// ES5
var name = 'Mukul Latiyan';
console.log('My name is '+ name); 
  
// ES6
const name1 = 'Mukul Latiyan';
console.log(`My name is ${name1}`); 

输出:

对象和数组的销毁

用javascript进行销毁基本上意味着将复杂的结构(对象或数组)分解为更简单的部分。通过销毁分配,我们可以将数组对象“解包”为一堆变量。

对象破坏

// ES5
const college = {
    name : 'DTU',
    established : '1941',
    isPrivate : false
};
  
let name = college.name;
let established = college.established;
let isPrivate = college.isPrivate;
  
console.log(name); // DTU
console.log(established); // 1941
console.log(isPrivate); // false

输出:

使用ES6的新方法是:

// ES6
const college = {
    name : 'DTU',
    established : '1941',
    isPrivate : false
};
  
let{name,established,isPrivate} = college;
  
console.log(name); // DTU
console.log(established); // 1941
console.log(isPrivate); // false

输出:

因此,与其将对象的每个属性分别声明为变量,不如将值放在大括号中以获取对象的任何属性。

阵列破坏

如果破坏数组,我们可以简单地将花括号替换为方括号。
喜欢:

// ES6
const arr = ['lionel','messi','barcelona'];
  
let[value1,value2,value3] = arr;
  
console.log(value1); // lionel
console.log(value2); // messi
console.log(value3); // barcelona

输出:

默认参数

默认参数允许您预先定义参数,这在某些情况下可能会有所帮助。在javascript中,函数参数默认为undefined,但是设置一个不同的默认值很有用。在ES6之前,我们用来定义默认参数的方法是通过在默认函数主体中测试参数value并为它们赋值(如果未定义)。

// ES5
function fun(a,b){
    return a+b;
}
  
console.log(fun(2,1)); // 3
console.log(fun(2)); // 2 + undefined is NaN(not-a-number)

输出:

我们删除了此默认参数错误,如下所示:

// ES5(improved)
function fun(a,b){
    b = (typeof b!=='undefined')?b:1;
    return a + b;
}
  
console.log(fun(2,1)); // 3
console.log(fun(2)); // 3

输出:

在ES6之后,我们可以简单地编写:

// ES6
function fun(a,b=1){
    return a + b;
}
  
console.log(fun(2,1)); // 3
console.log(fun(2)); // 3

输出:

班级

类是面向对象编程(OOP)的核心。 ES6引入了javascript中的类.javascript中的类可在构造函数的帮助下用于创建新的Objects,每个类中只能有一个构造函数。

// classes in ES6
class Vehicle{
    constructor(name,engine){
        this.name = name;
        this.engine = engine;
    }
}
  
const bike1 = new Vehicle('Ninja ZX-10R','998cc');
const bike2 = new Vehicle('Duke','390cc');
  
console.log(bike1.name); // Ninja ZX-10R
console.log(bike2.name); // Duke

输出:

剩余参数和价差运算符

  • 其余的参数:其余参数语法允许我们代表的参数数目不定作为array.With休息的帮助参数的函数可以使用任意数量的参数,不管它是如何定义被调用。
    // simple function
    function fun(a,b){
        return a + b;
    }
      
    console.log(fun(1,2)); // 3
    console.log(fun(1,2,3,4,5)); // 3 
    

    输出:

    在上面的代码中,即使我们传递的参数比参数多,也不会引发任何错误,但是仅会评估前两个参数。与rest参数的情况不同。

    // ES6 rest parameter
    function fun(...input){
        let sum = 0;
        for(let i of input){
            sum+=i;
        }
        return sum;
    }
      
    console.log(fun(1,2)); // 3
    console.log(fun(1,2,3)); // 6 
    console.log(fun(1,2,3,4,5)); // 15
    

    输出:

  • Spread运算符:Spread运算符是ES6提供的另一种运算符,它使我们有特权从数组中获取参数列表。考虑一个示例,其中有一个数字列表,然后从该列表中返回最小数字。
    console.log(Math.min(1,2,3,-1)); // -1 
    

    输出:

    现在考虑我们有一个数组而不是一个列表,上面的Math对象方法将不起作用,并且将返回NaN,例如:

    // Without spread 
    let arr = [1,2,3,-1];
      
    console.log(Math.min(arr)); // NaN
    

    输出:

    在函数调用中使用…arr时,它将“迭代”对象arr“扩展”到参数列表中。

    为了避免这种NaN输出,我们可以使用散布运算符,如下所示:

    // Spread operator
    let arr = [1,2,3,-1];
      
    console.log(Math.min(...arr)); // -1
    

    输出:

散布算子和休息运算符都使用三点(…),有时很难区分哪一个是休息或散布。只需记住:

  • 当…在函数参数的末尾时,它是rest参数。
  • 当…发生在函数调用或类似函数,其称为扩展运算符。