一、前言
近半个月找工作一来,都会经常被问到es6新增特性的问题,例如箭头函数、模板等等,在以前刚接触es6的新语法是,也是只是知道大概知道怎么用而已,也没有深入的去理解背后的含义。所以挺吃亏的,后面了解了一下,es6终归属于新语法,还是有存在浏览器兼容的问题,一般的话在框架里面是有比较多一点。在学习es6之前,得先了解一下何为es6:es6全称是ECMAScript 6.0,是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
二、知识点
1. const 和 let
const 定义的是常量,也就是不可改变值的变量,像是在node.js里面获取到某一个模块,最好就是使用const定义为常量,如下面例子,获取到路径模块
const path = require("path");
let 用于定义局部变量,只在定义改变量所在的代码块内有效,与var不相同的是,使用var声明的变量可以在全局范围内访问到这个变量,最简单的例子就是for循环。
var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6]();
在这个例子中,输出来的数字是 10,如果说当循环体的 i 变量是用let定义的话,那结果就不一样了,就是6。也就是说,变量i
是let
声明的,当前的i
只在本轮循环有效,所以每一次循环的i
其实都是一个新的变量,所以最后输出的是6
。另外,使用let定义的变量,是不存在变量提升的,也就是说不能先使用变量再定义,这是会保存的。
2.箭头函数
ES6允许使用“箭头”(=>
)定义函数。
var f = v => v
上面语法等同于
var f = function (v) { return v }
如果当箭头函数不需要参数或者多个参数时,可以用()
var f = () => { return 5 }
使用箭头函数需要注意的点:
(1)函数体内的this
对象,就是定义时所在的对象,而不是使用时所在的对象,原因是箭头函数根本没有自己的this
,导致内部的this
就是外层代码块的this
。
(2)不可以当作构造函数,也就是说,不可以使用new
命令,因为它没有this
,所以也就不能用作构造函数。
(3)不可以使用arguments
对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。
(4)不可以使用yield
命令,因此箭头函数不能用作Generator函数。
箭头函数与常规的函数不同的地方:
不能被用作构造函数:没有内部方法
[[Construct]]
(该方法允许普通的函数通过 new
调用),也没有 prototype
属性。因此, new (() => {})
会抛出错误。
三、
除此之外还有module、export、import、class等新增内容,Javascript越来越接近面向对象的语言。