Node V6支持的新特性
Node v6已经发布了,它带来了一些性能上的改善,以及对一些新的ES6语言特性的支持。 本文我们来具体的看看哪些特性得到了支持。
新ES6特性
默认函数参数
你可以为函数的行参提供默认值,如果实参没有被传入时,则使用该默认值。
function multiply(a, b = 1) { return a * b } multiply(5) // 5
剩余参数
在函数被调用时,剩余参数表示为一个数组名,该数组包含了那些没有对应形参的,长度不确定的剩余实参。
function fun1(...theArgs) { console.log(theArgs.length); } fun1(); // 弹出 "0", 因为theArgs没有元素 fun1(5); // 弹出 "1", 因为theArgs只有一个元素 fun1(5, 6, 7); // 弹出 "3", 因为theArgs有三个元素
展开(Spread)操作符
展开运算符允许一个表达式在某处展开,在多个参数(用于函数调用)或者多个元素(用于数组字面量)或者多个变量(用于解构赋值)的地方就会这样。
// before the spread operator function myFunction(x, y, z) { } var args = [0, 1, 2] myFunction.apply(null, args) // with the spread operator function myFunction(x, y, z) { } var args = [0, 1, 2] myFunction(...args)
解构
通过解构赋值,你可以从数组或对象中提取数据赋值给不同的变量。
var x = [1, 2, 3, 4, 5] var [y, z] = x console.log(y) // 1 console.log(z) // 2
new.target
new.target属性允许你检测函数或构造方法是否通过是通过new运算符被调用的。 在通过new运算符被初始化的函数或构造方法中,new.target返回一个指向构造方法或函数的引用。 在普通的函数调用中,new.target 的值是undefined。
function Foo() { if (!new.target) throw new Error('Foo() must be called with new') console.log('Foo instantiated with new') } Foo() // throws "Foo() must be called with new" new Foo() // logs "Foo instantiated with new"
Proxy
Proxy 对象用来为基础操作(例如:属性查找、赋值、枚举、方法调用等)定义用户自定义行为。
var handler = { get: function(target, name){ return name in target ? target[name] : 37 } }; // - targe: 目标对象,可以是任意类型的对象,比如数组,函数,甚至是另外一个代理对象。 // - handler: 处理器对象,包含了一组代理方法,分别控制所生成代理对象的各种行为。 // var p = new Proxy(target, handler) var p = new Proxy({}, handler) p.a = 1 p.b = undefined console.log(p.a, p.b) // 1, undefined console.log('c' in p, p.c) // false, 37
Reflect
Reflect 对象提供了若干个能对任意对象进行某种特定的可拦截操作(interceptable operation)的方法。
Symbol
Symbol是一种特殊的、不可变的数据类型,可以作为对象属性的标识符使用。
Symbol("foo") === Symbol("foo"); // false
开始使用Node 6
推荐你使用nvm, 查看安装文档。
nvm install 6
原文:http://wwsun.github.io/posts/nodejs-v6.html