前端学习之ES6+

1.ES6是什么

ES6,全称是ECMAScript 6,是JavaScript语言的下一代标准,由ECMA国际组织在2015年6月正式发布。ES6也被称作ECMAScript 2015,从这个版本开始,ECMA组织决定每年发布一个新的ECMAScript版本,以使JavaScript语言能够持续发展和进化。

ES6引入了许多新特性,这些特性旨在提高JavaScript语言的编程效率、代码的可读性和可维护性。以下是一些ES6中的重要特性:

  1. 箭头函数(Arrow functions):提供了一种更简洁的函数书写方式。

    const sum = (a, b) => a + b;
    
  2. (Classes):引入了类的概念,尽管JavaScript仍然是基于原型的,但类的语法更接近传统的面向对象语言。

    class Animal {
      constructor(name) {
        this.name = name;
      }
      speak() {
        console.log(`${this.name} makes a noise.`);
      }
    }
    
  3. 模块化(Modules):通过importexport关键字,支持模块的导入和导出,使得代码组织更加清晰。

    // 导出
    export const myFunction = () => {};
    // 导入
    import { myFunction } from './myModule';
    
  4. 模板字符串(Template literals):允许使用反引号(`)创建字符串,并提供字符串插值功能。

    const message = `Hello, ${name}!`;
    
  5. 解构赋值(Destructuring assignment):允许从数组或对象中提取数据,并赋值给变量。

    const [a, b] = [1, 2];
    const { x, y } = { x: 1, y: 2 };
    
  6. let和const:引入了letconst关键字用于声明变量,解决了var的一些问题,如变量提升和作用域问题。

  7. Promise:用于更优雅地处理异步操作,替代了传统的回调函数模式。

  8. 默认参数(Default parameters):允许在函数定义时为参数设置默认值。

  9. 展开运算符(Spread operator):允许在函数调用或数组字面量中展开数组或对象。

  10. Set和Map:引入了新的数据结构Set和Map,提供了更丰富的集合操作。

ES6的这些新特性极大地推动了JavaScript的发展,使得这门语言更适合大型应用的开发,并且更加现代化和高效。随着现代浏览器的支持,ES6已经成为现代前端开发的标配。

ES与JavaScript的关系

2.let和const的简介

在JavaScript中,let、var 和 const 都是用来声明变量的关键字,但它们之间有几个关键的区别:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>let、const 与 var 的区别</title>
  </head>
  <body>
    <script>
      // 1.重复声明
      // 已经存在的变量或常量,又声明了一遍
      // var 允许重复声明,let、const 不允许
      // let a = 1;
      // // ...
      // let a = 2;
      // console.log(a);

      // function func(a) {
      //   let a = 1;
      // }
      // func();

      // 2.变量提升
      // var 会提升变量的声明到当前作用域的顶部
      // console.log(a);

      // console.log(a);
      // var a = 1;

      // 相当于
      // var a;
      // console.log(a);
      // a = 1;
      // console.log(a);

      // let、const 不存在变量提升
      // console.log(a);
      // let a = 1;

      // 养成良好的编程习惯,对于所有的变量或常量,做到先声明,后使用

      // 3.暂时性死区
      // 只要作用域内存在 let、const,它们所声明的变量或常量就自动“绑定”这个区域,不再受到外部作用域的影响
      // let、const 存在暂时性死区
      // let a = 2;
      // let b = 1;
      // function func() {
      //   console.log(b);
      //   // console.log(a);
      //   // let a = 1;
      // }
      // func();

      // 养成良好的编程习惯,对于所有的变量或常量,做到先声明,后使用

      // 4.window 对象的属性和方法
      // 全局作用域中,var 声明的变量,通过 function 声明的函数,会自动变成 window 对象的属性或方法
      // let、const 不会

      // var/function
      // var age = 18;
      // function add() {}
      // console.log(window.age);
      // console.log(window.add === add);

      // let/const
      // let age = 18;
      // const add = function () {};
      // console.log(window.age);
      // console.log(window.add === add);

      // 5.块级作用域
    </script>
  </body>
</html>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>let、const 与 var 的区别</title>
  </head>
  <body>
    <script>
      // 块级作用域
      // 1.什么是块级作用域
      // var 没有块级作用域
      // for (var i = 0; i < 3; i++) {
      //   // console.log(i);
      // }
      // console.log(i);

      // let/const 有块级作用域
      // for (let i = 0; i < 3; i++) {
      //   // i = i+1
      //   // console.log(i);
      // }
      // console.log(i);

      // 2.作用域链
      // function func() {
      //   for (let i = 0; i < 3; i++) {
      //     // console.log(i);
      //   }
      // }
      // func();
      // console.log(i);
      // 作用域链:内层作用域->外层作用域->...->全局作用域

      // 3.有哪些块级作用域
      // {}
      // {
      //   let age = 18;
      //   // console.log(age);
      // }
      // console.log(age);

      // {}
      // for(){}
      // while(){}
      // do{}while()
      // if(){}
      // switch(){}

      // function(){}
      // const person = {
      //   getAge: function () {}
      // };
    </script>
  </body>
</html>

 1.作用域(Scope):
        var 声明的变量拥有函数作用域(function scope),这意味着如果 var 变量在函数外部声明,它将是一个全局变量;如果在函数内部声明,它只能在那个函数内部被访问。
        let 和 const 声明的变量拥有块作用域(block scope),这意味着它们的作用域限定在它们被声明的块(如一个花括号 {} 内部的区域)中。

2.变量提升(Hoisting):
        var 声明的变量会被提升到其作用域的顶部,但在初始化之前不能使用,访问未初始化的变量会得到 undefined。
        let 和 const 也会被提升,但是它们不允许在声明之前被访问,如果尝试这样做将会导致一个引用错误(ReferenceError)。

3.重复声明(Re-declaration):
        在同一个作用域内,var 允许重复声明同一个变量。
        let 和 const 不允许在同一个作用域内重复声明同一个变量。

4.重新赋值(Re-assignment):
        使用 var 和 let 声明的变量可以被重新赋值。
        使用 const 声明的变量必须在声明时初始化,并且一旦被赋值,其引用就不能再被改变。需要注意的是,const 保证的是变量引用的不可变性,而不是变量的值不可变。例如,如果 const 变量引用的是一个对象,那么对象的属性是可以被修改的。

5.window 对象的属性和方法
全局作用域中,var 声明的变量,通过 function 声明的函数,会自动变成 window 对象的属性或方法。let、const 不会

// 2.2.const 声明的常量,允许在不重新赋值的情况下修改它的值

// 基本数据类型

// const sex = 'male';

// sex = 'female'; //会报错

// 引用数据类型

// const person = { username: 'Alex' };

// // person = {};

// person.username = 'ZhangSan'; //通过.直接修改值,而不是复制操作,是可以的。

// console.log(person);

不知道用什么的时候先用const,也就是说不确定需求的时候用const,因为如果需要修改会报错,方便查找。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>const</title>
  </head>
  <body>
    <script>
      // 1.为什么需要 const
      // let
      // let sex = 'male';
      // // ...
      // sex = 'female';
      // console.log(sex);

      // const
      // const sex = 'male';
      // // ...
      // sex = 'female';
      // console.log(sex);

      // const 就是为了那些一旦初始化就不希望重新赋值的情况设计的

      // 2.const 的注意事项
      // 2.1.使用 const 声明常量,一旦声明,就必须立即初始化,不能留到以后赋值
      // const sex;
      // sex='male'

      // const sex = 'male';

      // 2.2.const 声明的常量,允许在不重新赋值的情况下修改它的值
      // 基本数据类型
      // const sex = 'male';
      // sex = 'female';

      // 引用数据类型
      // const person = { username: 'Alex' };
      // // person = {};
      // person.username = 'ZhangSan';
      // console.log(person);

      // 3.什么时候用 const,什么时候用 let
      // var
      // for (let i = 0; i < 3; i++) {}
      // const username = 'Alex';
      // // ...
      // username = 'ZhangSan';
    </script>
  </body>
</html>

以下是这些关键字的简单比较:

    var 是ES5及之前版本中的标准声明方式,现在一般不推荐使用,因为它的作用域和提升行为可能会导致代码中的意外行为。
    let 是ES6(ECMAScript 2015)中引入的,用于声明块作用域的变量,通常在需要重新赋值的情况下使用。
    const 也是ES6中引入的,用于声明块作用域的常量,当你不希望变量的引用改变时使用。

总结来说,现代JavaScript编程中推荐尽可能使用 const,只在变量需要被重新赋值时使用 let。这样做可以提高代码的可读性和可维护性。

3.模版字符串

(1)是什么

模板字符串(Template Literals)是ES6(ECMAScript 2015)中引入的一种新的字符串表示法,它允许开发者以更简单、更直观的方式创建和维护字符串。模板字符串使用反引号(`)而不是单引号(')或双引号(")来定义字符串。

以下是模板字符串的一些主要特点和用法:

  1. 多行字符串:模板字符串可以跨越多行,不需要使用反斜杠(\)来换行。

    const multiLineString = `This is a string
    that spans multiple lines.`;
    
  2. 字符串插值:可以在模板字符串中嵌入变量和表达式,这些变量和表达式会被解析并转换为字符串的一部分。插入变量或表达式时,需要使用${expression}的语法。

    const name = 'Alice';
    const age = 30;
    const greeting = `Hello, my name is ${name} and I am${age} years old.`;
    
  3. 标签模板(Tagged Templates):模板字符串可以与一个函数一起使用,这种用法称为标签模板。函数的第一个参数是一个字符串数组,其余的参数对应于模板字符串中的插值表达式。

    function myTag(strings, ...values) {
      // strings 是一个包含模板字符串中静态部分的数组
      // values 是一个包含模板字符串中动态部分(即插值表达式)的数组
      return strings.reduce((acc, str, i) => {
        return acc + str + (values[i] || '');
      }, '');
    }
    
    const result = myTag`Hello ${name}, how are you?`;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值