ES6知识点

简介: ES6知识点

ES6是JavaScript的第六个版本,也称作ECMAScript2015。它引入了许多新的语言特性,以使JavaScript语言更加现代化和强大化。下面是ES6中一些重要的新特性:

1. 块级作用域和let/const关键字

let 关键字用来声明变量,使用 let 声明的变量有几个特点:

  1. 不允许重复声明;
  2. 块儿级作用域(局部变量);
  3. 不存在变量提升;

不影响作用域链

const 关键字用来声明常量const 声明有以下特点:

  1. 声明必须赋初始值;
  2. 标识符一般为大写(习惯);
  3. 不允许重复声明;
  4. 值不允许修改;
  5. 块儿级作用域(局部变量);

2. 箭头函数(Arrow Functions)

箭头函数的注意点:

  1. 如果形参只有一个,则小括号可以省略;
  2. 函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的执行结果;
  3. 箭头函数 this 指向声明时所在作用域下 this 的值;
  4. 箭头函数不能作为构造函数实例化;
  5. 不能使用 arguments

特性:

  1. 箭头函数的this是静态的,始终指向函数声明时所在作用域下的this的值;
  2. 不能作为构造实例化对象;
  3. 不能使用 arguments 变量;

       代码演示

//  ES6允许使用箭头(=>)定义函数
        //  传统写法:无参数
        var say = function () {
            console.log("hello!");
        }
        say();
        //  ES6箭头函数: 无参数
        let speak = () => console.log("hello 哈哈!");
        speak();
        //  传统写法:一个参数
        var hello = function (name) {
            return "hello " + name;
        }
        console.log(hello("訾博"));
        //  ES6箭头函数:一个参数
        let hi = name => "hi " + name;
        console.log(hi("訾博"));
        //  传统写法:多个参数
        var sum = function (a, b, c) {
            return a + b + c;
        }
        console.log(sum(1, 2, 3));
        //  ES6箭头函数:多个参数
        let he = (a, b, c) => a + b + c;
        console.log(he(1, 2, 3));
        //  特性
        //  1、箭头函数的this是静态的,始终指向函数声明时所在作用域下的this的值 
        const school = {
            name: "大哥",
        }
        //  传统函数
        function getName() {
            console.log("getName:" + this.name);
        }
        //  箭头函数
        getName1 = () => console.log("getName1:" + this.name);
        window.name = "訾博";
        //  直接调用 
        getName();
        getName1();
        //  使用call调用 
        getName.call(school);
        getName1.call(school);
        //  结论:箭头函数的this是静态的,始终指向函数声明时所在作用域下的this的值
        //  2、不能作为构造实例化对象
        // let Persion = (name, age) => {
        //  this.name = name;
        //  this.age = age;
        // }
        //  let me = new Persion("訾博",24);
        //  console.log(me);
        //  报错:Uncaught TypeError: Persion is not a constructor
        //  3、不能使用 arguments 变量
        //  let fn = () => console.log(arguments);
        //  fn(1,2,3);
        //  报错:Uncaught ReferenceError: arguments is not defined

3. 模板字符串(Template Literals)

模板字符串(template string)是增强版的字符串,用反引号(`)标识,特点:

字符串中可以出现换行符;

可以使用 ${xxx} 形式引用变量;

代码演示:

//  声明字符串的方法:单引号('')、双引号("")、反引号(``)
        //  声明
        let string = `我也一个字符串哦!`;
        console.log(string);
        //  特性
        //  1、字符串中可以出现换行符 
        let str =
            `<ul>
                <li>大哥</li> 
                <li>二哥</li> 
                <li>三哥</li> 
                <li>四哥</li>
            </ul>`;
        console.log(str);
        //  2、可以使用 ${xxx} 形式引用变量 
        let s = "大哥";
        let out = `${s}是我最大的榜样!`;
        console.log(out);

4. 解构赋值(Destructuring Assignment)

什么是解构赋值:

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值

应用场景:

频繁使用对象方法、数组元素,就可以使用解构赋值形式;

5. 类和对象(Classes and Objects)

Classes 概述:

ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。基本上,ES6 class 可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的 class 写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已;

知识点:

  1. class 声明类;
  2. constructor 定义构造函数初始化;
  3. extends 继承父类;
  4. super 调用父级构造方法;
  5. static 定义静态方法和属性;
  6. 父类方法可以重写;

对象扩展

概述:

ES6 新增了一些 Object 对象的方法:

  1. Object.is 比较两个值是否严格相等,与『===』行为基本一致(+0 NaN);
  2. Object.assign 对象的合并,将源对象的所有可枚举属性,复制到目标对象;
  3. protosetPrototypeOf setPrototypeOf 可以直接设置对象的原型;

6. Promise和异步编程

Promise概述:

Promise ES6 引入的异步编程的新解决方案。语法上 Promise 是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果;

  1. Promise 构造函数: Promise (excutor) {}
  2. Promise.prototype.then 方法;
  3. Promise.prototype.catch 方法;

7. Symbol和迭代器(Symbol and Iterators)

ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是JavaScript 语言的第七种数据类型,是一种类似于字符串的数据类型;

Symbol 特点:

  1. Symbol 的值是唯一的,用来解决命名冲突的问题;
  2. Symbol 值不能与其他数据进行运算;
  3. Symbol 定义的对象属性不能使用for…in循环遍历 ,但是可以使用Reflect.ownKeys 来获取对象的所有键名;

8. 模块化(Modules)

这些特性大大提高了JavaScript的灵活性、可读性和可维护性。在ES6中,开发者可以使用这些新功能来更快、更高效地编写JavaScript代码。

相关文章
|
7月前
|
前端开发
【面试题】如何使用ES6 ... 让代码优雅一点?
【面试题】如何使用ES6 ... 让代码优雅一点?
|
7月前
|
JavaScript 前端开发 小程序
大前端进阶(ES6)
大前端进阶(ES6)
85 0
|
7月前
|
前端开发 JavaScript
es6 相关面试总结
es6 相关面试总结
42 1
|
7月前
|
存储 前端开发 JavaScript
ES6 面试题
ES6 面试题
109 0
|
7月前
|
前端开发 JavaScript 网络架构
【面试题】 ES6知识点详细解析(一)
【面试题】 ES6知识点详细解析(一)
264 0
|
7月前
|
存储 JavaScript 前端开发
【面试题】 ES6知识点详细解析(二)
【面试题】 ES6知识点详细解析(二)
|
7月前
|
JavaScript 前端开发
|
7月前
|
JavaScript
ES6面试题总结
ES6面试题总结
|
前端开发
ES6知识点
ES6知识点
|
缓存 JavaScript 前端开发
「万字进阶」深入浅出 Commonjs 和 Es Module
全方位介绍模块化 Commonjs 和 Es Module
「万字进阶」深入浅出 Commonjs 和 Es Module