基本常识
Brendan Eich在1995年4月入职Netscape Communications Corporation(网景通信公司)。并于1995年5月用10天时间发明了Javascript。
Javascript语言特点
- 借鉴c语言的基本语法
- 借鉴Java语言的数据类型和内存管理
- 借鉴Scheme语言,将函数提升到“第一等公民”(first class)的地位
- 借鉴Self语言,使用基于原型(prototype)的继承机制
时代背景
伟大的万维网之父Tim Berners-Lee于1989年3月正式提出了万维网的设想,并于1990年12月25日在瑞士日内瓦的欧洲粒子物理实验室发明了世界上第一个网页浏览器。从那以后,web就日益流行。
在Web日益流行的同时,人们对于客户端脚本语言的需求也越来越强烈。
那个时候,绝大多数因特网用户都使用28.8kbit/s的调制解调器上网,但是网页的大小和复杂性却不断增加。有时候为了完成一个简单的表单验证,而需要频繁的与服务器交换数据,这无疑增加了服务器的负担,也是考验用户的耐心。
想象一下,用户填写一个表单,点击了“提交”按钮,然后等待半分钟,最终服务器返回的消息说有一个必须填写的字段没有填正确,这个时候,就会很尴尬了。然而在那个没有客户端脚本语言的年代,这种事情却是经常发生的。
当时走在时代前沿的Netscape公司,决定开发一种客户端语言,用来处理这种简单的验证问题。
Java和Javascript
首先思考一个问题:Java和Javascript是什么关系?
有没有觉得这个问题很熟悉?没错,有时候会在前端面试题中见到,有时候前端同行之间或者前端和后端之间互相调侃也会问这种问题。在中国的程序猿们总会说:雷锋和雷峰塔的关系。而国外的程序猿则会回答:Java is to Javascript as car(汽车) is to carpet(地毯)。
对于中国程序猿,相似的还有:
老婆和老婆饼
牛和蜗牛
梁山和梁山伯
对于国外的程序猿:
ham(火腿) is to hamster(仓鼠)
关于这两个语言名字的梗有很多有趣的比喻,如有兴趣可以查看知乎的一个主题:Java 和 JavaScript 是什么关系?,这个问题下面有很多让你乐不可支的答案。当然,看看笑笑也就完了。
现在我们来正经的思考这个问题:Java和Javascript是什么关系?
真的一点儿关系都没有吗?
还记得在文章一开始就说的语言特点这个事情吗?Javascript借鉴了Java的数据类型和内存管理。所以单从这一点来说,Java和Javascript还是有关系的。
而且当时为了赶在发布日期前完成LiveScript(后面的Javascript),Netscape公司与Sun公司,即Javascript所属公司与Java所属公司建立了一个开发联盟。并在Netscape Navigator2正式发布前夕,Netscape为了搭上媒体热炒的Java的顺风车,临时把LiveScript改名为Javascript。
Javascript与Java的对比
不过对于编程语言来讲,说二者之间有什么关系这种话题不太恰当。个人感觉,只要是个编程语言,都多多少少能扯上关系。至少,编程语言都是用来操控计算机系统,服务于人类的。
所以,严谨一点来说,编程语言之间做对比更加恰当。比如说:Javascript和java有什么异同?
这里我引用一位博主的文章,这篇文章对于java和Javascript之间的异同做了详细的对比。
博客地址:Javascript和Java之间的关系
这篇文章中关于二者之间的关系的描述我并不认可,不过其对于二者之间的比较,我还是认同的。
我在这里原封不动引用其一张表格:
比较 | JavaScript | Java |
---|---|---|
诞生时间 | 1995年 | 1995年 |
曾用名 | Mocha, LiveScript | Oak |
母公司 | 网景公司(美国) | 太阳微系统公司(美国) |
主要作者 | Brendan Eich 一个人 | James Gosling及其小伙伴 |
开发完成时间 | 前前后后共10天 | 前前后后一、二年 |
是否面向对象? | 是,基于原型和原型链方式 | 是,基于类和继承的方式 |
可以采用的编程风格 | 面向过程、面向对象、面向函数 | 面向过程、面向对象,Java8之后加入了部分面向函数的特点 |
语言类型 | 动态语言、弱类型 | 静态语言、强类型 |
可否用于客服端开发? | 可以,主要用于浏览器端 | 可以,但在桌面端应用的争夺中彻底输给了微软的VS.Net系列 |
可否用于手机端开发? | 可以,叫Web App | 可以,叫Android(安卓) |
类库和框架数量如何?社区表现如何? | 非常多,非常丰富,非常活跃 | 比较多,比较丰富,比较活跃 |
现在的主人 | 全天JavaScript开源社区 | Oracle公司(美国) |
对初学者学习的难度? | 上手快,学会很容易,学精通很不容易 | 上手慢,学会可能慢一点,学精通也很不容易 |
体系结构 | 本质上精简、但现在衍生出的类库、框架越来越多,让人目不暇接 | 一直都比较庞大、庞杂。 |
是否跨平台? | 是(全世界几乎所有的浏览器都支持,如果不支持,就几乎没人用) | 是(只要安装了Java虚拟机的电脑都可以运行) |
编译型还是解释型? | 解释型,但某些常用代码可以被编译成本地代码 | 先编译成字节码,再通过虚拟机解释执行 |
哪个更强大? | 无法笼统回答,JavaScript高手比Java低手强大 | 无法笼统回答,Java高手比JavaScript低手强大 |
哪个和H5的结合更紧密? | JavaScript | |
中国的大部分学校里主要教哪个? | Java |
再次声明:此表格来源于博客园博主:枫叶漫天,其博客地址:枫叶漫天:http://www.cnblogs.com/jian-tong
此表格所在文章地址:JavaScript和Java之间的关系:http://www.cnblogs.com/jian-tong/p/5995020.html
如有侵权,请联系pelli_mail@163.com,我会及时修正本文相关引用
Javascript的主人是谁?
对于表格中Javascript语言的现在的主人这一说法,还是值得一说的。表格中说的是:全天的Javascript开源社区。
表格中说法对错与否,就要看如何理解“主人”这个词了。
就好像说,我们中国是人民当家做主,中国所有人都是中国的主人一样。说我是中国的主人,没毛病。说同为中国人的你是中国的主人,也没毛病。但是中国的各种法律政策,却不是我或者你来拍板决定。
同样的道理,作为全天开源社区的一员,我们可以享受到Javascript以及与Javascript相关的各种工具,类库带来的便利。而对于开源社区来讲,每个人都是开源软件的主人,只要遵从开源软件的协议,你可以随心所欲的使用,修改。你也可以使用Javascript语言,在开源社区发布自己的框架,类库,工具等等。不过Javascript语言的规范,却不是我们这些号称开源社区的主人来制定的。
Javascript是ECMAScript规范在客户端的具体实现。
上面这句话该怎么理解呢?
在Brendan Eich发明了Javascript之后,客户端脚本语言得到了互联网用户的欢迎,网景公司发布的Navigator 2也快速占领了浏览器市场,一度达到了90%的份额。而后微软也发布了一种客户端脚本语言,Jscript,这和Javascript很像。但是毕竟是两个公司的产品,这导致网站开发人员需要开发两套脚本。这种状况促进了ECMA组织的诞生,ECMA组织为了防止各浏览器厂商各自为政,发布表现形式不一致的浏览器以及脚本语言,导致万维网混乱,从而决定标准化脚本语言。该组织制定了一个ECMAScript语言的标准,规定各浏览器厂商要遵循ECMAScript语言标准实现客户端脚本语言Javascript。从而使浏览器环境表现一致。
ECMAScript是一个语言的标准。不同环境下的编程,可能脚本语言的名字不一样,但是只要遵从了ECMAScript的标准,其语法,特性都是一样的。比如Flash编程中,ActionScript就是ECMAscript的另外一种实现。这里面的语法,变量,对象等,和Javascript都很相似。
就比如中国的宪法,宪法是基本法,所有其他特定领域的法律都要遵从基本法。
在浏览器环境下,所有的浏览器厂商发布的浏览器产品,其中的脚本语言Javascript都要遵从ECMAScript规范。
所以你写的Javascript代码alert("hello");
在谷歌浏览器中会弹出“hello”,在火狐浏览器中会弹出“hello”,在欧朋浏览器中会弹出“hello”,在Safari浏览器中也会弹出“hello”,因为这些浏览器中的Javascript都遵从了ECMAScript标准,浏览器中的Javascript解释引擎都能根据ECMAScript的标准读懂你写的Javascript代码。
所以说Javascript是从属于ECMAScript标准的,也就是说ECMAScript标准的主人就是Javascript语言的主人。
ECMA协会指定TC39委员会负责“标准化一种通用的、跨平台、供应商中立的脚本语言的语法和语义”,经过数月的努力,TC39委员会完成了ECMA-262的新脚本语言的标准。定义一种新的脚本语言,名为ECMAScript,ECMA-262就是ECMAScript语言的标准。
所以Javascript语言是由TC39委员会以制造商中立的态度制定语法语义标准。但是Javascript的主人,是全地球人类。
组织、机构、人物、产品和公司之间的关系
起因:
【网景公司】
发布
【Navigator浏览器】捆绑
Javascript语言
【微软公司】发布
【IE浏览器】捆绑
JScript
导致: 两种脚本语言使客户端脚本语言混乱,没有统一的标准
经过:
ECMA
指定
TC39委员会制定
ECMA-262标准定义
ECMAScript脚本语言
结果:
定义了一种新的脚本语言:ECMAScript
统一了新脚本语言的标准:ECMA-262标准
规定浏览器开发厂商将ECMAScript作为各自Javascript实现的基础
备注:ECMA-262是ECMAScript脚本语言的标准
名词解释
ECMA:European Computer Manufacturers Associ 欧洲计算机制造商协会
人物名片
英文名:Brendan Eich
中文名:布兰登·艾奇
生日:1961年
国籍:美国
主要经历:
1961年,出生
1995年4月,入职Netscape Communications Corporation
1995年5月,用10天时间发明了Javascript
1998年,协助成立mozilla
2003年,协助成立Mozilla基金会
2014年4月3日,出任Mozilla的CEO十天,被迫辞职
关键词
javascript
Java
Scheme
Python
C
ECMAScript
Mocha
Oak
Brendan Eich
Netscape Communications Corporation
Sun
Micorsoft
Mosaic
liveScript
liveWare
W3C
TC39
ECMA
本文作者
作者:Pelli
微信:pelligit
QQ号:2653807423
github:http://www.github.com/pelligit
参考链接
Brendan Eich的自述: https://brendaneich.com/2008/04/popularity/
Brendan Eich: https://en.wikipedia.org/wiki/Brendan_Eich#cite_note-Saternos2014-6
Javascript20年: http://brendaneich.github.io/ModernWeb.tw-2015/#1
Javascript诞生记: http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html
Javascript和Java之间的关系:http://www.cnblogs.com/jian-tong/p/5995020.html