近半个月找工做一来,都会常常被问到es6新增特性的问题,例如箭头函数、模板等等,在之前刚接触es6的新语法是,也是只是知道大概知道怎么用而已,也没有深刻的去理解背后的含义。因此挺吃亏的,后面了解了一下,es6终归属于新语法,仍是有存在浏览器兼容的问题,通常的话在框架里面是有比较多一点。在学习es6以前,得先了解一下何为es6:es6全称是ECMAScript 6.0,是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言能够用来编写复杂的大型应用程序,成为企业级开发语言。node
const 定义的是常量,也就是不可改变值的变量,像是在node.js里面获取到某一个模块,最好就是使用const定义为常量,以下面例子,获取到路径模块es6
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定义的变量,是不存在变量提高的,也就是说不能先使用变量再定义,这是会保存的。函数
ES6容许使用“箭头”(=>
)定义函数。学习
var f = v => v
上面语法等同于ui
var f = function (v) { return v }
var f = () => { return 5 }
(1)函数体内的this
对象,就是定义时所在的对象,而不是使用时所在的对象,缘由是箭头函数根本没有本身的this
,致使内部的this
就是外层代码块的this
。this
(2)不能够看成构造函数,也就是说,不可使用new
命令,由于它没有this
,因此也就不能用做构造函数。spa
(3)不可使用arguments
对象,该对象在函数体内不存在。若是要用,能够用Rest参数代替。prototype
(4)不可使用yield
命令,所以箭头函数不能用做Generator函数。
不能被用做构造函数:没有内部方法
[[Construct]]
(该方法容许普通的函数经过 new
调用),也没有 prototype
属性。所以, new (() => {})
会抛出错误。
除此以外还有module、export、import、class等新增内容,Javascript愈来愈接近面向对象的语言。