前言
春节假期因为没有win电脑回家,所以才有时间静下心来看会儿书。这次读的是《JavaScript二十年》,书籍主要介绍了语言诞生以及一些阶段性的发展里程碑,能学到的有用知识不会太多,如果你还没看过红宝书或者《你不知道JavaScript》等系列书籍,建议先看完再来读这本比较”闲“的书。
下面我会以我个人的理解角度概括一下书籍的一些主要内容,给一些想看没时间看的兄弟节省一下时间。
1. 语言诞生
90年代初,互联网崛起了,浏览器出现在大众视野了,大家开始冲浪了。Netscape
,也就是网景,在此时创立,很显然大家都想要捞一笔大的。
此时,Web
核心还是HTML
,但是此时大家都对可以方便编排用户应用操作的脚本语言有了极大的期待,于是,网景招了Brendan Eich
进来(为了方便国人理解,后文用老E
代替Brendan Eich
),让他开发一款可以集成到网页里的脚本语言。
恰恰好在这个时候,万物起源 Java
出来了,Java
的开发公司Sun
和网景达成了协议,决定将Java
集成到浏览器中。于是,网景老板现在的战略目标就变了,他们可能只需要一门[小语言
]来补充一下Java
就可以了。
此时,网景内部还是有很多不同的声音,主要是:
- 他妈的
Java
到底行不行? - 为什么要两门语言,直接
Java
不就完了,还小语言补充是瞧谁不起? - 谁他妈来开发这门小语言,有没有大佬,在线等,很急
对于第一个问题,当时还是95年的春天,年轻的Java对于初学者来说还是相当难上手的,所以,从多方面考虑,被我们寄予厚望的Java
最终还是倒在了16强!
对于第二个问题,他们对标了当时的竞品,微软,他们也是出售Visual C++
给专业选手,然后使用 Visual Basic
来作为补充的脚本语言,给一些菜鸡做一些[胶合
]定制。这个想法很不错,所以网景也抄了。
那么就剩下第三个问题了,很显然,此时需要我们的主角老E登场了。他花了10多天(是的,书里是这么写的,你现在是不是觉得自己像个沙比?)来创建了一门叫做Mocha
的新语言,证明这门语言在网景浏览器中的可行性。95年12月的时候,正式命名为JavaScript
发布,通稿中 JavaScript 被描述为「一种对象脚本语言」,可用于编写脚本来动态地「修改 Java 对象的属性和行为」。它将作为「Java 的补充,方便进行在线应用开发」。尽管它们的技术设计只有表面上的相似,网景和Sun还是试图在 Java 和 JavaScript 语言间建立牢固的品牌联系。这种名称上的相似性及其带来的两种语言具备密切联系的暗示,长期以来都是导致混乱的根源之一。
众所周知,程序员最精通的,还是CV,所以老E在一开始的设计中,借鉴了许多其他语言的特点。
- 比如Lisp 式的函数一等公民概念
- 比如从Java借鉴的
null
概念,本质上是表达「没有对象」的对象,也是后来一个经典Bug之一 - 比如从C借鉴的条件语句,循环语句和非顺序控制流的
break
、continue
和return
语句
根据 Brendan Eich 的回忆,typeof null
的值是原始 Mocha 实现中抽象泄漏g的结果。null
的运行时值使用了与对象值相同的内部标记值进行编码,因此typeof
运算符的实现就直接返回了"object"
。
2. 创立标准
尽管作者是一个天才,但是10天赶工出来的新语言还是有很多的问题。
JavaScript
发布后的第二年,微软也宣布在IE上支持这个语言,同时他们也开始了JScript
的开发工作,为什么名字不一样,你想想啊,网景肯定不会把代码给微软啊,所以他们只是在各自浏览器上实现了一样的逻辑,并且兼容一样的脚本代码,网景的叫做JavaScript
,微软这边就叫JScript
。每当微软对比两个浏览器时发现相同脚本具有差异,他们就要对JavaScript做逆向工程,看看这些人底层写的什么垃圾实现,为什么不同浏览器会有不同的实现。(这个同代码不同浏览器下表现不同的经典尿性也一直延续至今)
在整个JScript
的开发过程中,微软的人一旦发现JavaScript
的语言规范缺失,就疯狂Diss网景的哥们。
JavaScript
风评拉胯,[ 创立一个标准,确保在不同浏览器中的兼容性 ]变得越来越重要。
于是,网景通过人际关系找到了ECMA
国际组织的秘书长,跟他提议推动JavaScript
的标准化。由于国际标准组织(ISO
)认可ECMA
,ECMA
的标准可以通过快速通道来成为ISO
标准。
96年10月,ECMA
邀请所有风云人物(基本是网景和微软的员工)到场共同参与JavaScript的讨论,并且组成一个新的Ecma技术委员会(Technical Committee
)。
ECMA
使用数字来标记旗下的技术委员会,而下一个可用的数字是39,所以这次组织会议就是经典的TC39
会议
会议开始,两派人马轮番演讲,最终委员会采用了微软员工Robert Welland编写的文档,网景确实拉了跨了,还不如继承者。这份文档是利用了伪代码
的概念来进行编写的,这种方式在描述JavaScript的语义方面相当有效,其详细程度足以确保互操作性。
所以,ECMAScript
和JavaScript
的关系是什么?前者是后者的规范,后者是前者的一个实现。比如前者描述了内置方法A,应该实现什么逻辑,什么类型入参和什么类型的返回结果。那么不同的浏览器厂商就要实现这一套逻辑,给自己的 不管是JavaScript
还是 JSCript
,又或者是什么BScript
,都要有这个内置方法A,并且使用方法符合ECMAScript
的定义。
Ogay,先写到这里了,后面还没整理完,明天再更