Node.js v6 LTS 中最激动人心的六个 ES6 特性

简介: 本文讲的是Node.js v6 LTS 中最激动人心的六个 ES6 特性,随着 Node.js v6 LTS "Boron" 的发布,Node.js 的核心 API 和依赖关系得到了全面的改进。基于 Chromium 的 JavaScript 引擎的 Node.js V8 的更新非常重要,它具备对 Node.js 和 JavaScript 开发者心心相印的 ES6 的几乎全方位的支持。
本文讲的是Node.js v6 LTS 中最激动人心的六个 ES6 特性,

随着 Node.js v6 LTS "Boron" 的发布,Node.js 的核心 API 和依赖关系得到了全面的改进。基于 Chromium 的 JavaScript 引擎的 Node.js V8 的更新非常重要,它具备对 Node.js 和 JavaScript 开发者心心相印的 ES6 的几乎全方位的支持。

这篇文章中,我们将一起了解 Node.js v6 LTS 版本中的六个最新的 ES6 特性。

给函数设置默认参数

新的默认函数特性让函数在初始化定义的时候能够设置一个默认的参数值。

ES6 中函数默认参数特性和随后 Node 核心内容的增加,并没有必然地增加以前没有实现的功能。也就是说,这些对自定义参数值的最高级的支持让我们在整个应用生态中能够写出更加协调一致的代码。

以前为了设置函数默认参数,你必须这样做:

function toThePower(val, exponent) {
  exponent = exponent || 2

  // ...

}

现在利用新特性,可以这样定义参数并设置默认值:

function toThePower(value, exponent = 2) {
  // 内部代码略
}

toThePower(1, undefined) // exponent 默认设置为 2

用解构的方式提取数组和对象的数据

解构数组和对象使得开发者能够从两者中获取值并将其以变量的形式展现。解构有着非常广泛的应用——包括需要从大集合中获取特定的值之类的情况,提供一种简单的方法能够在语言内置特征中获取值。

解构对象的语法要求用花括号({}),解构数组的语法要求用方括号([])。

  • 数组: const [one, two] = [1, 2]
  • 对象: const {a, b} = { a: ‘a’, b: ‘b’ }
  • 默认: const {x = ‘x’, y} = { y: ‘y’ }

解构实例 1:

// 伪元素
function returnsTuple() {
  return [name, data]
}

const [name, data] = returnsTuple()

解构实例 2:

const threeValuesIn [,,,three, four, five] = my_array_of_10_elements

解构实例 3:

ES5 中获取对象值的方法:

var person = {
  name: "Gumbo", 
  title: "Developer", 
  data: "yes" 
}

var name = person.name
var title = person.title
var data = person.data

ES6 中利用解构获取对象值的方法:

const { name, title, data } = person

利用 Array#includes() 检查数组的值

内置的 .includes() 数组方法(提示:# 表示这是一个可以用于数组的内置方法)能够非常简单地检查数组中是否包含某个值。如果数组中包含某个特定的值,该方法将会返回 true。谢天谢地,你可以和 array.indexOf(item) === -1 永别了。

[1, 2].includes(1) // 返回 true

[1, 2].includes(4) // 返回 false

多余参数 使得函数能够获取预定义参数之外的参数,这些参数将会被收录在一个数组中。同时可以利用方法来获取并解析这些多余的参数,并且实现一些扩展功能,这要比之前通过 arguments 对象来处理具有更多的优选项。(类似于 PHP 中的可变参数函数,即传入的参数数目大于函数定义的参数数目,可以通过特定的函数获取这些参数并另作他用。译者注)

多余参数同样适用于箭头函数——这简直棒极了!箭头函数之前并没有这种功能,因为箭头函数中不存在 arguments 对象。

function concat(joiner, ...args) {

  // args 实际上是一个数组

  return args.join(joiner)

}

concat(‘_’, 1, 2, 3) // 返回 ‘1_2_3’

用展开运算符展开数组

展开运算符是一款 JavaScript 中原生的多元化工具。它非常实用,可以将数组展开成函数的参数或者数组常量。举个例子,它的神通广大之处在于当你需要重复使用一些值的时候,展开运算会将其存储起来,并且调用的时候会比之前占用更少的内存。

在函数参数中使用展开运算符:

const numbersArray = [1, 2, 3]
coolFunction(...numbersArray)

// same as
coolFunction(1, 2, 3)

在数组常量中使用展开运算符:

const arr1 = [1, 2]

const arr2 = [...arr1, 3, 4]
// arr2: [1, 2, 3, 4]

展开运算符还有一个有趣的特性,可以和 Emoji 交互。Wes Bos shared 了一个展开运算符的有趣的用法,一个非常形象的和 Emoji 的使用实例。其中一个例子:

Emoji 与 JavaScript 的展开运算符

提醒一下,Hyperterm 或者 Terminal.app (OS X 上的一个老版本)都不能正确显示新版的 Emoji —— 那只是一个 JavaScript 和 Node 用在一些边缘领域的有趣的例子而已。

给匿名函数命名

ES6 中,匿名函数可以接受一个 name 属性,这个属性在调试问题中极其有用——比如,当你得到了一个匿名函数导致的堆栈轨迹时,你将能够的到该匿名函数的 name 值。

相比于在 ES5 或之前的版本中你只能够得到堆栈轨迹的 anonymous 信息,ES6 的这个特性显得尤为引人注目,它给出了一个明确的原因,而不是泛泛而谈。

var x = function() { }; 

x.name // 返回 'x'

写在最后

如果你想了解更多关于 Node.js v6 发布为长期支持版(LTS)的变动,请查看我们的博文:升级之后,Node.js v6 LTS 的十个关键特性

或者,想获取更多 Node、JavaScript、ES6、Electron、npm、yarn 或者其他内容的更新,请关注 @NodeSource 的 Twitter。非常乐意收到您的消息,我们一直都在!





原文发布时间为:2016年11月17日

本文来自云栖社区合作伙伴掘金,了解相关信息可以关注掘金网站。
目录
相关文章
|
1月前
|
缓存 JavaScript 数据安全/隐私保护
js开发:请解释什么是ES6的Proxy,以及它的用途。
`ES6`的`Proxy`对象用于创建一个代理,能拦截并自定义目标对象的访问和操作,应用于数据绑定、访问控制、函数调用的拦截与修改以及异步操作处理。
18 3
|
1月前
|
JavaScript
js开发:请解释什么是ES6的类(class),并说明它与传统构造函数的区别。
ES6的类提供了一种更简洁的面向对象编程方式,对比传统的构造函数,具有更好的可读性和可维护性。类使用`class`定义,`constructor`定义构造方法,`extends`实现继承,并可直接定义静态方法。示例展示了如何创建`Person`类、`Student`子类以及它们的方法调用。
22 2
|
1月前
|
自然语言处理 JavaScript 网络架构
js开发:请解释什么是ES6的箭头函数,以及它与传统函数的区别。
ES6的箭头函数以`=>`定义,简化了函数写法,具有简洁语法和词法作用域的`this`。它无`arguments`对象,不能用作构造函数,不支持`Generator`,且不改变`this`、`super`、`new.target`绑定。适用于简短表达式,常用于异步编程和高阶函数。
18 5
|
1月前
|
前端开发 JavaScript 开发者
探索JavaScript ES6的八种常见使用技巧:开启现代编程之旅
探索JavaScript ES6的八种常见使用技巧:开启现代编程之旅
|
2月前
|
JavaScript 前端开发
Google Earth Engine(GEE)扩展——ee-polyfill JavaScript 方法 (ES6+)
Google Earth Engine(GEE)扩展——ee-polyfill JavaScript 方法 (ES6+)
16 1
|
2天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
16 3
|
2天前
|
JavaScript 前端开发
js开发:请解释什么是ES6的Generator函数,以及它的用途。
ES6的Generator函数是暂停/恢复功能的特殊函数,利用yield返回多个值,适用于异步编程和流处理,解决了回调地狱问题。例如,一个简单的Generator函数可以这样表示: ```javascript function* generator() { yield 'Hello'; yield 'World'; } ``` 创建实例后,通过`.next()`逐次输出"Hello"和"World",展示其暂停和恢复的特性。
13 0
|
4天前
|
JavaScript 前端开发 Linux
JavaScript 的跨平台特性
【4月更文挑战第22天】JavaScript 的跨平台特性
19 8
|
24天前
|
人工智能 前端开发 JavaScript
【前端设计】HTML+CSS+JavaScript基本特性
【前端设计】HTML+CSS+JavaScript基本特性
|
1月前
|
JavaScript 前端开发
js开发:请解释什么是ES6的async/await,以及它如何解决回调地狱问题。
ES6的`async/await`是基于Promise的异步编程工具,能以同步风格编写异步代码,提高代码可读性。它缓解了回调地狱问题,通过将异步操作封装为Promise,避免回调嵌套。错误处理更直观,类似同步的try...catch。