JavaScript居然还有这么骚的管道运算符,你知道吗?

153 阅读4分钟

新 JavaScript 管道运算符:可以将任何内容转换为单行文字

image.png

请问,把以下数组['USA', 'Australia', 'CodingBeauty'],输出成字符串Names: Usa-asutralia-codingbeauty,一共分几步?

正常情况下,我们可能会写出下面这样代码:

image.png

但是,当我们使用了管道操作符|>后,可以这样编写代码:

如此简洁优雅,令人耳目一新!所有那些临时变量都不见了,更不用说想出这些名字和键入它们所花的时间了

Phil Karlton说过一个笑话:"计算机科学中只有两件难事:缓存失效和命名"。

使用 JavaScript 管道运算符可以清除杂乱的代码,提高可读性,并以更直观的方式编写数据转换代码(基本上是所有代码)。

当然,对于第一次接触这玩意的人来说,视觉冲击挺大的,因为不熟悉而一时难以接受也正常。但是从代码角度来考虑,应尽量避免使用冗长的变量,这比重复使用短名变量更有利于压缩代码:

在一些复杂的操作中,尤其是操作文件等异步操作中,涉及到很多中间变量,基本上大家都随意取名,比如用短下划线这个例子:

相当糟糕,对于新手来说,理解起来要困难N倍。

有人会说下划线 "丑陋",尤其是在 JavaScript 等语言中,几乎不会出现下划线。好吧,那我们就去掉这些临时下划线变量:

临时变量下划线是不见了,但是更看不懂了!要想知道数据是如何在整个代码中流动并做出必要的调整,谈何容易?

一目了然——这是我们在编写每一行代码时应该努力实现的目标。

管道运算符大大优于其他所有方法,它既能让我们摆脱临时变量的困扰,又具有可读性。它就是为此而设计的。

这里的 % 只存在于这一特定管道中。

方法链?

相信大家在操作数组列表的时候,都组合使用过大量的数组方法,如 map、filter 和 sort:

这也很好。也没有任何临时变量或无法读取的嵌套,可以很容易地从头到尾跟踪整个链条。而且通过格式化,可以轻松地在链中的任意位置添加更多方法(在 VS Code编辑器可以使用 Ctrl + UpCtrl + Down 快捷键,轻松调换两个方法的处理顺序。)

核心的库比如 http 和 jQuery 等等也是这样设计的。

然而方法链的问题在于,我们无法在所有地方都使用它。如果类不是这样设计的,我们就会陷入困境。比如对于对象外的generator生成器、async/await和函数/方法的调用,它的效果并不好,就像上面的那样:

但所有这些都可以使用管道操作符来解决,包括async异步函数 和 import导入函数。

管道操作符

在JavaScript中,管道运算符(|>)是一种箭头函数的语法糖,用于简化函数调用链。它将一个函数的返回值传递给另一个函数作为参数。

但是注意,这个符号并不是正式的JavaScript语言特性。它是一种在某些JavaScript环境(如Babel、TypeScript等)中实现的语法糖。

在正式的JavaScript语言规范(如ES5、ES6等)中,并没有这个符号。所以,如果你在正式的JavaScript环境中或Node环境中使用这个符号,可能会导致语法错误。

image.png

Babel 已经实现了相关功能;它在顶级等待、可选链等方面都是这样做的,管道操作符也不例外。

只需使用@babel/plugin-proposal-pipeline-operator plugin  插件即可。

Prettier 插件也能正确美化代码:

结束语

或许,语言中的新功能大家并不会都能接受并且使用,但是有了 JavaScript 管道操作符,您就可以清除代码中的临时变量和隐蔽嵌套,大大提高代码的可读性、效率和质量。对于这个新的管道运算符特性,各位客官您怎么看?

参考文章:medium.com/coding-beau…