新 JavaScript 管道运算符:可以将任何内容转换为单行文字
请问,把以下数组['USA', 'Australia', 'CodingBeauty']
,输出成字符串Names: Usa-asutralia-codingbeauty
,一共分几步?
正常情况下,我们可能会写出下面这样代码:
但是,当我们使用了管道操作符|>
后,可以这样编写代码:
如此简洁优雅,令人耳目一新!所有那些临时变量都不见了,更不用说想出这些名字和键入它们所花的时间了
Phil Karlton说过一个笑话:"计算机科学中只有两件难事:缓存失效和命名"。
使用 JavaScript 管道运算符可以清除杂乱的代码,提高可读性,并以更直观的方式编写数据转换代码(基本上是所有代码)。
当然,对于第一次接触这玩意的人来说,视觉冲击挺大的,因为不熟悉而一时难以接受也正常。但是从代码角度来考虑,应尽量避免使用冗长的变量,这比重复使用短名变量更有利于压缩代码:
在一些复杂的操作中,尤其是操作文件等异步操作中,涉及到很多中间变量,基本上大家都随意取名,比如用短下划线这个例子:
相当糟糕,对于新手来说,理解起来要困难N倍。
有人会说下划线 "丑陋",尤其是在 JavaScript 等语言中,几乎不会出现下划线。好吧,那我们就去掉这些临时下划线变量:
临时变量下划线是不见了,但是更看不懂了!要想知道数据是如何在整个代码中流动并做出必要的调整,谈何容易?
一目了然——这是我们在编写每一行代码时应该努力实现的目标。
管道运算符大大优于其他所有方法,它既能让我们摆脱临时变量的困扰,又具有可读性。它就是为此而设计的。
这里的 %
只存在于这一特定管道中。
方法链?
相信大家在操作数组列表的时候,都组合使用过大量的数组方法,如 map、filter 和 sort:
这也很好。也没有任何临时变量或无法读取的嵌套,可以很容易地从头到尾跟踪整个链条。而且通过格式化,可以轻松地在链中的任意位置添加更多方法(在 VS Code编辑器可以使用 Ctrl + Up
和 Ctrl + Down
快捷键,轻松调换两个方法的处理顺序。)
核心的库比如 http 和 jQuery 等等也是这样设计的。
然而方法链的问题在于,我们无法在所有地方都使用它。如果类不是这样设计的,我们就会陷入困境。比如对于对象外的generator
生成器、async/await
和函数/方法的调用,它的效果并不好,就像上面的那样:
但所有这些都可以使用管道操作符来解决,包括async
异步函数 和 import
导入函数。
管道操作符
在JavaScript中,管道运算符(|>
)是一种箭头函数的语法糖,用于简化函数调用链。它将一个函数的返回值传递给另一个函数作为参数。
但是注意,这个符号并不是正式的JavaScript语言特性。它是一种在某些JavaScript环境(如Babel、TypeScript等)中实现的语法糖。
在正式的JavaScript语言规范(如ES5、ES6等)中,并没有这个符号。所以,如果你在正式的JavaScript环境中或Node环境中使用这个符号,可能会导致语法错误。
Babel 已经实现了相关功能;它在顶级等待、可选链等方面都是这样做的,管道操作符也不例外。
只需使用@babel/plugin-proposal-pipeline-operator
plugin 插件即可。
Prettier 插件也能正确美化代码:
结束语
或许,语言中的新功能大家并不会都能接受并且使用,但是有了 JavaScript 管道操作符,您就可以清除代码中的临时变量和隐蔽嵌套,大大提高代码的可读性、效率和质量。对于这个新的管道运算符特性,各位客官您怎么看?