我就提一个最大的优点,它甚至足以抵消 JS 罄竹难书的全部缺点,那就是 JS 可以被嵌入到 HTML 的 script 标签中执行。
在 1995 年 JavaScript 1.0 立项之初,当时 Netscape 的老大 Marc Andreessen 强调,Mocha(第一个 JS 引擎的项目代号)应该非常易于使用,任何人都可以直接在 HTML 文档中编写几行。
回顾历史,这一设计决策并非理所当然。除了发明一门新的半成品脚本语言外,他们还可以将 Java 作为 Web 的标准语言,或设计语言独立的接口。Java Applet 也是 Netscape 和 Sun 两家公司预期的 Web 应用技术栈正道,它们内部都为了是否需要 Java 和 JavaScript 两门语言有过音量相当大的不同意见。但最后两边老大(Marc Andreessen 和 Bill Joy)力排众议的决策仍然是——选择发明能通过 <script src=&#34;x.js&#34;> 的方式解释执行的新语言 JavaScript。相比 Java「将主程序的代码体放在包内部类声明下名为 main 的静态方法中,并为所有参数、返回值和变量声明静态类型」的繁琐操作,嵌在 HTML 文本里就行的 JavaScript 对 Web 来说真是不知道简单到哪里去了。
这个设计决策影响极为深远。从 Netscape Navigator 2.0 这个历史上第一款支持 JS 的浏览器开始,JS 就可以通过这种沿用至今的方式来执行,迄今仍然是给 Web 页面提供动态性的唯一指定高级语言(WASM 这种字节码规范是和 x86 与 ARM 汇编同级的东西,不在此列)。只要用记事本改几行代码保存,刷新网页就能看到结果——JavaScript 这种极低的门槛不知道带了多少人入坑,我也是其中之一。
然后,Netscape 推出的 JavaScript 被微软抄出的 JScript 跟进支持,后面的浏览器厂商基本全部支持了这个 de facto 的事实标准。于是根据《JavaScript: The First 20 Years》中的浏览器博弈论,后面任何主流浏览器厂商想要单独做「正确」的非前向兼容改造,都无法在博弈中取得优势。君不见 ES4 和 Dart 就是前车之鉴。而至于现在的 WASM 能取代 JS 吗?我还是觉得很难,理由参见这里:
WebAssembly 的出现是否会取代 JavaScript?和很多东西类似地,当一个姑且不算那么差的东西(排他性地)占了坑以后,换掉它的成本早就大大超过继续拥护它,给它花式续命的成本了。现实生活中别看大家嘴上怎么骂,身体上都是讲实用主义的,写代码更是这样。
所以,JS 靠着把握历史进程,通过设计上与 HTML 极佳的互操作性占住了 Web 入口 ,当上了浏览器里的天龙人语言——这就是我眼中 JS 最大的设计优点。就为了这一个优点,数以百万计的前端开发者多年来不知道忍受了它多少缺点(摊手) |