购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.5.3 高级用法

ES2015 所定义的模式匹配语法中,还有一些比较高级的语法供我们使用,以满足一些比较特殊的需求。

3.5.3.1 解构别名

如果在一个使用了对象作为多返回值载体的函数中,我们需要获取其中的某个返回值,但是却不想使用其中的属性名作为新的变量名(或常量名),那么就可以使用别名来获得相应的返回值,只需要在原来的返回值名称后面加上“: x”即可,其中x为希望使用的变量名。

3.5.3.2 无法匹配的缺省值

如果在模式匹配中,存在无法匹配的值(载体对象中不存在相应的值或目标参数所对应下标超出了载体数组的下标范围),默认情况下会获得undefined。

当然,如果不希望得到undefined,ES2015 也允许我们为参数赋予一个默认值,即当无法匹配到相应的值时,该变量便会使用该默认值。

3.5.3.3 深层匹配

大部分情况下,我们从服务器或者第三方服务获取到的数据都不会是只有一层的简单结构数据。若我们需要从中获取到某一个深层元素,从前可能需要一层一层的获取相应的属性,但在ES2015 中,模式匹配便可以实现深层匹配。

比如我们从Flickr API中获取一个关于熊猫(Panda)的图片集,API获取的数据呈如下结构。

显然我们真正想要的只是其中一少部分的内容,那么我们应该如何使用模式匹配中的深层匹配来取得这些我们想要的数据呢?

假设我们需要取得items中每一个元素的title、link、author、published以及media中的m,我们可以通过Array.map方法和深层匹配解构来取得数据。

就如上面这段代码所演示的,我们可以通过嵌套解构表达式来获取深层的内容,而且可以在对象中嵌套数组来获取对象中的数组的某元素,反之亦然。

同样,别名、缺省值等语法也可以使用在深层匹配中。

3.5.3.4 配合其他新特性

在ES2015 中有许多新的特性是相辅相成的,当它们被单独使用时可能并没有很明显的优越性,但当它们组合使用时,便会体现出许多奇妙之处。

比如在ES5 中,数组类型被定义了一个新的forEach方法,这个方法相对于ES3 时代中的for循环语句好处是Functional Programming(函数式编程)和自带闭包;但同时也产生了一个新的问题——forEach无法像for、while等循环语句一样被break等控制语句终止,进而产生了许多不便。

而TC-39 为ES2015 加入了for-of循环,配合const、Array.entries()等特性,我们甚至可以写出远比ES5 时代更好的代码,这同样可以说是ES2015 中的进步之处。 JUhfsC1bfHUPSFoYGLyJZqjuPlg7Aqgut5qYkRtwfnAfhKAofCX3cfScu+U5b0XG

点击中间区域
呼出菜单
上一章
目录
下一章
×