首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript是怎么逆袭王者的?

前言

作为一个程序员,我其实一直是抵触JavaScript的,一直无法理解为什么JavaScript能存活至今,而且还有越来越火的趋势。

JavaScript作为一门编程语言,经常被吐槽有诸多不足,比如补丁式的面向对象设计,弱类型的不安全性,傻大的DOM模型,奇怪的==和===运算符,等等。

但是,这些种种不足,却并没有妨碍它成为一门越来越热的编程语言。

看一下刚刚过去的2019年8月份的编程语言排行榜,JavaScript比2018年同期还提升了一个名次。

再看看过去20年的数据,JavaScript居然从来没有跌出过Top20(对比Pascal)。

甚至,JavaScript还被评为2014年的年度编程语言:

如果再仔细看一下Top20语言,我们会发现,JavaScript是唯一一个弱类型、但是有很强通用性的脚本语言。

提通用性,是为了把JavaScript和SQL区分开来,毕竟,SQL是几乎不被程序员们看成是一门编程语言的,而且它的使用场景也非常局限。

我一直很困惑,JavaScript的江湖地位为什么这么高,直到最近看到一篇文章,勾起了种种回忆,并解答了我的这个困惑。

《How JavaScript Grew Up and Became a Real Language》

https://medium.com/young-coder/how-javascript-grew-up-and-became-a-real-language-17a0b948b77f

以下是这篇文章的笔记和一些备注。

1. 起源

1995年,Netscape在与微软进行激烈的市场竞争中,进入到一个很尴尬的阶段,他们与Sun公司的战略合作伙伴关系即将结束,而Sun公司的Java和applet,是当时Web编程人员使用的最多的工具。

Netscape公司决定雇佣Brendan Eich来发明一门编程语言,作为Java的替代品。

他们给了Brendan Eich ……10天的时间……去发明一门语言。

然后,Brendan Eich完成了这个不可能任务,赶在Netscape浏览器发布之前完成了JavaScript第一个版本。

【阿斌】此处应该有配乐

出于商业的考虑,Natscape要求Brendan Eich把这门新语言命名为JavaScript,虽然它跟Java一毛钱关系都没有。多年来,这个名字一直都困扰这人们。

2. 前五年

作为一门不严肃的编程语言,在它诞生后的前5年里,JavaScript的主要使用者,是那些无法使用Java的人,主要是一些业余编程人员、爱好者以及需要赶工的人,其中,有一些人主要从事网页设计

JavaScript被用来制作网页上的一些动效,比如可翻动的按钮:当鼠标指针移动到按钮上时,显示另一个图标,像这样:

这就是当时JavaScript的主要使用场景。

虽然JavaScirpt有很多不足,但是,作为唯一一个被浏览器直接支持的语言,它刚好诞生在一个正确的时间和正确的地点:互联网大爆发。

很多跟它一样丑陋、有着各种不足的语言(比如BASIC、COBOL、SQL、PHP等等)一样,都在正确的时间、正确的地点发挥着至关重要的作用。

在当时,真正限制JavaScript发展空间的是:JavaScript的运行方式。

JavaScript只能运行在网页里,就像在一个沙盒中一样,它被严格地与电脑隔离开,无法直接访问电脑的文件系统、显示器和其他任何硬件设备,更糟糕的是,它还与服务器隔离,无法访问服务器上的任何数据。

3. 突破限制

值得一提的是, 作为Netscape的老对手,微软拯救了JavaScript。

当整个世界还沉迷于用JavaScript制作一些带有翻动特效的按钮时,微软决定为Outlook开发一个更加便捷的网页前端。然后,他们开发出了Outlook Web Access(Outlook网页访问接口):

他们发明了一种技术,让网页可以不需要刷新页面,也能从后台收取新邮件。

注意,当时Google的Gmail还没有被发明。

他们为此开发了一个叫XMLHTTPRequestActiveX组件。这个组件给了JavaScript从后台向服务端发起请求获得数据的能力。

随后,别的浏览器也增加了各自的XMLHTTPRequest实现,这样这个接口就不再是微软的ie浏览器的专属功能了。

但是,真正把XMLHTTPRequest的潜能发挥出来、并让整个Web开发界震惊的,不是微软,而是Google。

2004年,Google发布了Gmail,然后2005年发布了Google Maps

它让世界感受到了基于Web也能开发出像桌面软件一样的交互式Web应用的可能。

【阿斌备注】如果你还记得,这种技术叫做:AJAX。

4. 走进新时代

XMLHTTPRequest无疑是改变JavaScript中最重要的元素之一,但是,并不是唯一。

在那之后,JavaScript的发展又停滞了很多年。

占据市场垄断地位的ie浏览器,它的版本迭代非常慢,而且由于是随着操作系统发布,所以市场上同时存在着大量不同版本的ie。

于是,Web开发者不得不在代码中检查浏览器的版本,以防止出现代码不兼容的问题。

2006年,jQuery的出现,一举解决了浏览器的兼容性问题,让开发者可以专注于开发产品的功能。

2008年,Google发布了V8 JavaScript引擎,大大提高了JavaScript的运行速度。

而且,由于V8引擎是一个独立的开源组件,可以被任何项目所使用,它打开了新世界的大门,诞生了很多想象力之作,比如Node.js(一个用JavaScript开发服务器的框架),Electron(一个用JavaScript开发桌面App的框架)。

2008年底,HTML5的第一个可用版本诞生。H5并不是关于JavaScript的规范,但是它提供了很多新的JavaScript 编程接口。

突然之间,JavaScript开发者获得了一系列工具:存储本地数据、管理浏览器历史、使用声音、运行后台任务等等。

Web应用和桌面应用之间的差距被大大缩小了。

5. 现代的JavaScript

JavaScript的成功,到底是它诞生于浏览器的特殊地位的必然结果,还是一系列不可思议的巧合?我们无法断言。

回顾JavaScript历史,我们知道,它从来都不是任何人的最爱。

相比JavaScript,人们的偏爱,首先是Java applets,然后是Flash,甚至Silverlight

【阿斌备注】这三个里,Flash算是存活最久的了,不过也将于2020年终止它的命运。

但是,JavaScript战胜了所有的对手,笑到了最后。

所以,也许,更公平的说法是,JavaScript证明了一点,一个所有开发者都知道的一个道理:reach (可实现性?)。

如果一项技术,具有足够的可实现性,你并不需要一开始就是最好的,只要足够好,就已经足够了

【阿斌备注】原文用的词是reach,文艺的翻译,大概就是小扎喜欢说的:完成胜于完美。

我觉得,作者想表达的意思是,够用,能够完成需要它完成的任务。

现在,JavaScript已经为未来开辟了足够宽的道路:服务端开发(Node.js)桌面开发(Node.js 和 Electron)。而且TypeScript的出现,让开发者可以在编译时就进行类型检查。

【阿斌备注】大爱TypeScript,值得单独写一篇。

未来,WebAssembly也许会打破语言的边界,开发者可以使用任何高级语言编写可以跑在JavaScript引擎上的应用。

现在,我们可以承认,JavaScript,尽管它有很多古怪和矛盾,它依然是最伟大的发明之一。

Brendan Eich把JavaScript塞进了Netscape浏览器,然后,我们把整个世界塞进了浏览器,最后,我们获得了现代互联网。

【阿斌备注】Always bet on JavaScript,这个梗,意思是说,这20年来,面对无数挑战,JavaScript最后都赢了。所以,如果你不知道该支持哪个语言,那就支持JavaScript。

后记

很多程序员,比如我,有一种精神洁癖,完美主义,我们经常看不上一些看起来很不咋地的东西(编程语言也好,工作也好,项目也好,职务也好,等等),总觉得太low。

JavaScript的逆袭,给了我很大的启发,希望对你也有帮助。

欢迎关注,一起看看IT男眼中的世界,顺便做个游戏。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190901A0HX9B00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com