JavaScript波澜起伏的一生

1,234 阅读8分钟

JavaScript俨然是热度最高的编程语言之一,作为前端开发在工作中总离不开写JS,但有些疑问总在我脑海中:它与Java到底什么关系?所谓的ES、TS又是什么?现在就让我们一起走进JS的前世今生吧。

LiveScript

说到JavaScript的起源,就不得不和web的发展联系到一块,起初由于网页的大小和复杂性不断提升,在频繁的表单验证之间存在的数据交换过程只会带来负担,于是美国网景公司(Netscape)开始着手开发一种浏览器上的脚本语言,用于处理简单的验证,它就是LiveScript,但这并不是最终发布时的正式名称。

Java's Script ?

我们都知道Java与JavaScript语言本身并无关系,网上普遍说法是JavaScript为了蹭Java的热度而如此命名,但这种说法有失偏颇,因为当时Java也是才刚刚推出的编程语言,其火爆也应该是后话了。

实际上因为Sun公司所大肆宣传的“一次编写,到处运行”对网景公司影响很大(想想这种客户端脚本语言不也是一样只要有浏览器环境就可以到处运行吗,比如现在流行的利用前端技术进行跨终端开发,我认为本质很接近,不管你是什么手机,平板,电脑,其他终端设备,只要有浏览器内核就行),于是两家公司建立了联盟,LiveScript改名为JavaScript,后来Java确实越来越火,网景毕竟主要还是做浏览器,当然很愿意让JavaScript搭上这趟顺风车,这个商标顺理成章也就归属Sun公司了。

这个似乎要发展成为”简化版Java“的网页脚本语言由当时网景公司的布兰登·艾奇负责编写,但这位程序员偏偏不是Java的Fans,所以几乎是以应付工作的心态,仅用了10天就把第一版JavaScript设计完成,谁又能想到如今JS会大火,这也算是导致了JS本身存在一些问题受开发者诟病的原因之一,但话说回来,当时也只是以“简单的脚本语言”为目标设计出来的编程语言而已,这可能就是所谓的 伟大事业往往都有一个渺小的开端吧。

一切才刚刚开始

说到这里我们已经大致了解,JavaScript就是网景公司与Sun公司联合推行的一款客户端脚本语言,目的解决网页中的简单验证等需求,它由网景公司的一名程序员设计。但我们看到JS发展到如今已经跟一开始天差地别,时代在不停推动着JS,那么其中是谁来主导JS前行呢?是其发行者网景公司吗?遗憾的是网景公司其实在2003年就已解散,说到底网景公司主要的产品是旗下一款浏览器,而我们现在并未看到过网景浏览器,因为它在第一次浏览器大战中就完全败给了微软旗下的IE,在当时IE占据了整个浏览器市场份额的96%,网景没有丝毫扭转机会。没错,虽然JavaScript获得了巨大的成功,可网景公司最终却走向了失败。

JScript? CEnvi?

在网景公司推出JavaScript不久后,微软在IE3浏览器中也加入了名为JScript的JavaScript实现,与JScript类似的还有CEnvi,这就意味着不同的浏览器厂商将会实现不同的脚本语言,JavaScript的标准化问题被提上了议事日程。

当时网景公司将 JavaScript1.1 提交由国际标准化组织ECMA制定统一规范,而后ECMA组织制定了JavaScript的统一规范,命名为ECMAScript,发展到现在,一直由各个互联网行业前沿的公司一起参与规范制定,而所有浏览器将遵循这套规范统一去实现。

ECMAScript 序

网景公司早已不存在,而当初一起推行JavaScript的Sun公司呢?后来被甲骨文公司收购合并,甲骨文公司得到了Java的所有权,所以JavaScript也变成了甲骨文公司的注册商标,这就很尴尬了,不知道什么时候起,我们写的“JavaScript”已不再是原本的JavaScript,这种浏览器脚本语言其实根本上并没有一个准确的名字(比如微软就更希望它叫做JScript),或者说它以前叫做过JavaScript,但现在还能说是吗?而大家还是习惯叫它JavaScript,可能是约定俗成的存在。就好像我们老说H5开发,大家就知道是指HTML5开发,其实HTML本来就是简写了,H5这种说法明显是不科学的,要这样我说C3开发你能联想到我说的是CSS3开发吗?没这种说法吧,但是说H5开发就可以,我们很多人都不会意识到有什么不对,因为习惯了。

所以我的个人理解是,我们现在写的所谓的“JS”,并不能完全称之为ES,我们知道了ECMAScript是JavaScript的规范,而“JS”是由浏览器去实现的,各个浏览器虽然都遵循ES规范,但实现的程度、所支持的情况还是各不一样,规范只有一套,浏览器却不止一种,终究无法天下大同。遇到同样一段“JS”代码,在谷歌浏览器中完美运行,在IE上面就各种错误,我们认为是你写的代码有问题,这种问题我们称之为“兼容性问题”。而web网页开发中处理兼容性问题也成为了一项重要的工作内容。

ECMAScript6

关于JavaScript和ECMAScript到这里基本就讲完了,总之JavaScript(或简称JS)是一个历史遗留下来的统称,由于它的这段发展史特殊,跟其他编程语言不同,它自身的版本更迭应该以ECMAScript这个规范为主。而其中数ES6(ECMAScript第六版)最为磨难,从ES3之后存在的一些激进的想法,一直到ES5都未能完全实现,最后在ES6中才修改完毕发布,所以也说ES6是革命性的一版,此后JS进入了一个高速发展的阶段,很多代码在低版本浏览器未必支持运行或者并未实现,所以现在前端开发中经常需要使用到一些编译工具,将代码最终编译成浏览器均可识别的代码,这里不做过多赘述。

前端编程发展至今,一直在规避以往复杂低效等问题,“面向浏览器编程”这一特性也许一直是种制约,但毫无疑问总体依然在向新的编程体验不断迈进,路漫漫其修远兮。

TypeScript - 面向未来开发

如果你对TypeScript感到陌生,那应该是还没有使用过Angular,Angular是由谷歌开发的一款前端框架,是目前较为流行的框架之一,其本身从2.0版本开始使用TypeScript编写,而TypeScript来头也不小,是由微软开发的一套语言,扩展了JavaScript的语法和特性,同时也支持ES6规范,TS+Angular的组合感觉十分强悍,毕竟背后是微软和谷歌两大公司,但同时这套组合也让我感觉到学习成本相对陡峭,比如相对于vue来说。

当然TypeScript因为是JS的超集所以无法直接运行于浏览器的,也是需要编译,TS有专门的编译器。

题外:JQuery - 刀耕火种的前端时代

JQuery本身是非常优秀的JS框架,在大量传统JS框架类库中最具代表性,甚至因为太过流行,很多初学者连JS都没搞明白是啥就开始先学习JQ,产生这种现象的原因,是Jquery框架太过流行导致的先入为主,而究其根本,还是因为JavaScript本身发展的原因,前面提到JavaScript在开始设计时就没考虑那么多,而不同的浏览器又有不同的实现,导致各种兼容问题,可以说JS本身就是问题重重,想想大好时间居然花在各种测试兼容上面是有多浪费,所以Jq为代表的这些框架类库自然就崛起了,打开Jq在github上的主页,我们可以看到6k+commit,共270+开发者为其贡献代码,复杂的事情和麻烦的兼容就交给框架去处理,加上Jq本身的设计就非常优秀,所以能在很长一段时间火爆。或许懒才是推动发展的源泉,真正的懒人总会去思考怎样把复杂的问题简单化,编程的魅力也尽在其中。