JavaScript 个性特点:编程语言界的平头哥

JavaScript 这家伙已经疯球了,什么都不在乎的。无论你把什么玩意儿丢给他,他都能给你摆平。根本不要在这位老哥面前提什么编译错误。就是一坨??? 老哥都能给你运行。什么,你在担心他会给出一个错误的结果?都给你结果了还要啥自行车?如果你担心结果会是错的,那自己用 jest 或 mocha 弄一个测试就结了。

JavaScript 测试框架也是啥都不在乎。你用他测试啥都行。不要给我说什么依赖注入、接口过度泛化、反射机制!老哥跑测试就是一把梭!存根(stub),监视(spy),模拟(mock),抄起 sinon 就是干!端到端测试用 webdriverio,API 测试用 lodash-match-pattern,稳如狗!

你说 JavaScript 邋邋遢遢、不够帅气?人家根本就不在乎好吧。你要是嫌弃,就用 eslint、standardize it、prettier 这些工具来给老哥打扮打扮吧。

平头哥 JavaScript 浑身是胆,根本不在乎你怎么看。在老哥这里不要提什么私有(private)变量、保护(protected)变量。你尽管检查对象、更改函数,管你啥时候。平头哥一身正气,从不藏着掖着。你问他为啥会这样?艺高人胆大啊!

JavaScript 老哥从不磨叽。等什么等啊,一看就不是平头哥的作风。JavaScript 从来不等那些数据库存取、API 调用什么的。错过了 await 关键字、没完成 Promise 对象,没关系!还是该吃吃该睡睡!

想来点静态类?老哥请 TypeScript 或 Flow 兄弟们来帮忙就成。不过你可能会觉得这有点像给平头哥戴个游泳圈。是有点违和,最后任何类型的声明都能把他轻松击败。(不过,现在还有人在乎“类型安全”什么的吗?)

平头哥喜欢用工具,JavaScript 也是。

last count( http://www.modulecounts.com/ )统计出,NPM 包的项目里有超过 800,000 个模块——大约是 Maven(Java)的三倍了。所以就算这里面的大部分模块和泥蛋一样又脏又丑又怎样,每个月有 180 亿的下载量呢,不服都不行。

平头哥啥都能吃:毒蛇、猛禽蛋、蝎子,来者不拒,最爱的是蜜蜂幼虫。是什么东西不重要,在平头哥眼里都是“吃的”。JavaScript 也能消化一切东西,管你喂给他什么,对他来说全是“对象”。更绝的是,解构和展开语法让 JavaScript 能把对象嚼得碎碎的,吃得更美味、更有营养。

JavaScript 才不在乎怎么和别的语言接口:protobuf 啦,swagger 定义啦,RESTish 啦,graphQL 啦,都招呼上来。老哥就是干这活的,大杂烩 API 把所有接口方式照单全收,交给他处理就行。

平头哥 JavaScript 家的小弟们

Lodash 也是个狠角儿。你要是觉得 JavaScript 中还需要用 for 循环 while 循环什么的,Lodash 就笑笑不说话。如果你在 JavaScript 里还用原始的 foreach、map、filter 等语句,Lodash 表示不想理你。如果你在做字符串处理、类型检查或给对象集变形时还在自己手动写代码,Lodash 只能对你说:对不起我们不认识。

在操控日期方面,momentjs 有自己的想法。他不会在意什么时区、时间存档,甚至连你在哪儿他都不在乎。无论你输入的日期格式有多蠢,他都能抽丝剥茧找到其本质所在,然后输出你所在时区的正确时间格式。

让我们来看看还有哪个老实人需要 ORM(对象关系映射),我们来嘲笑他。反正 JavaScript 不需要。关系型数据表本质不是 OOP 对象,它还想骗你多动脑筋。有了 knexjs,JavaScript 可以避免数据库 / 对象不匹配问题、有漏洞的 ORM 抽象问题,而且一般都能跳过冗余的 OOP 模型定义,因为有 SQL 数据模型就够了。

你是谁,你来自哪里,你现在要做什么?passport 模型能帮你回答这一深奥的哲学问题。

忘了你那神圣的前端 MVC 模式吧!React 以及他的朋友 redux,vue 等等已经彻底毁灭了这一误用的、过度泛化的教条。

还有一些工具如 bluebird、axios、babel 等等,这些兄弟们一起协助 JavaScript,让平头哥更加无所畏惧。

被用了那么多年,也被骂了那么多年,JavaScript 脸皮已经相当厚了。各种编程实践都离不开他,世界各地的开发者们也都在吐槽他。但无论如何,老哥在 GitHub 上每年有 230 万下载量,我管你怎么想叻~