ES6是JavaScript的第六个版本,也称作ECMAScript2015。它引入了许多新的语言特性,以使JavaScript语言更加现代化和强大化。下面是ES6中一些重要的新特性:
1. 块级作用域和let/const关键字
let 关键字用来声明变量,使用 let 声明的变量有几个特点:
- 不允许重复声明;
- 块儿级作用域(局部变量);
- 不存在变量提升;
不影响作用域链
const 关键字用来声明常量,const 声明有以下特点:
- 声明必须赋初始值;
- 标识符一般为大写(习惯);
- 不允许重复声明;
- 值不允许修改;
- 块儿级作用域(局部变量);
2. 箭头函数(Arrow Functions)
箭头函数的注意点:
- 如果形参只有一个,则小括号可以省略;
- 函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的执行结果;
- 箭头函数 this 指向声明时所在作用域下 this 的值;
- 箭头函数不能作为构造函数实例化;
- 不能使用 arguments;
特性:
- 箭头函数的this是静态的,始终指向函数声明时所在作用域下的this的值;
- 不能作为构造实例化对象;
- 不能使用 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 写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已;
知识点:
- class 声明类;
- constructor 定义构造函数初始化;
- extends 继承父类;
- super 调用父级构造方法;
- static 定义静态方法和属性;
- 父类方法可以重写;
对象扩展
概述:
ES6 新增了一些 Object 对象的方法:
- Object.is 比较两个值是否严格相等,与『===』行为基本一致(+0 与 NaN);
- Object.assign 对象的合并,将源对象的所有可枚举属性,复制到目标对象;
- proto、setPrototypeOf、 setPrototypeOf 可以直接设置对象的原型;
6. Promise和异步编程
Promise概述:
Promise 是 ES6 引入的异步编程的新解决方案。语法上 Promise 是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果;
- Promise 构造函数: Promise (excutor) {};
- Promise.prototype.then 方法;
- Promise.prototype.catch 方法;
7. Symbol和迭代器(Symbol and Iterators)
ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是JavaScript 语言的第七种数据类型,是一种类似于字符串的数据类型;
Symbol 特点:
- Symbol 的值是唯一的,用来解决命名冲突的问题;
- Symbol 值不能与其他数据进行运算;
- Symbol 定义的对象属性不能使用for…in循环遍历 ,但是可以使用Reflect.ownKeys 来获取对象的所有键名;
8. 模块化(Modules)
这些特性大大提高了JavaScript的灵活性、可读性和可维护性。在ES6中,开发者可以使用这些新功能来更快、更高效地编写JavaScript代码。