Javascript诞生与历史

摘要:
1995年5月,他在10天内发明了Javascript。Javascript借鉴了Java的数据类型和内存管理。在Netscape Navigator 2正式发布前夕,Netscape临时将LiveScript的名称改为Javascript,以赶上在媒体中流行的Java。Javascript和Java之间的比较不适合编程语言。值得一提的是表中Javascript语言的当前所有者。然而,Javascript语言的规范并不是由所谓开源社区的所有者制定的。Javascript是ECMAScript规范在客户端的具体实现。

基本常识

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之间的关系

这篇文章中关于二者之间的关系的描述我并不认可,不过其对于二者之间的比较,我还是认同的。

我在这里原封不动引用其一张表格:

比较JavaScriptJava
诞生时间1995年1995年
曾用名Mocha, LiveScriptOak
母公司网景公司(美国)太阳微系统公司(美国)
主要作者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脚本语言的标准

名词解释

ECMAEuropean Computer Manufacturers Associ欧洲计算机制造商协会

人物名片

Brendan Eich
英文名: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 Eichhttps://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

免责声明:文章转载自《Javascript诞生与历史》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 7.0正式版工厂镜像下载安卓问题报告小记(四):Some projects cannot be imported because they already exist in the workspace下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Groovy脚本基础全攻略

1 背景Groovy脚本基于Java且拓展了Java,所以从某种程度来说掌握Java是学习Groovy的前提,故本文适用于不熟悉Groovy却想快速得到Groovy核心基础干货的Java开发者(注意是Java),因为我的目的不是深入学习Groovy语言,所以本文基本都是靠代码来解释,这样最直观,同时也够干货基础入门Groovy的特点和结构。 开始介绍前先给...

Linux 安装 erlang 和 rabbitmq

1. 更新基本系统 安装任何软件包之前,建议使用以下命令更新软件包和存储库 yum -y update 2. 安装Erlang 由于RabbitMQ是基于Erlang(面向高并发的语言)语言开发,所以在安装RabbitMQ之前,需要先安装Erlang。在本教程中我们将安装最新版本的Erlang到服务器中。 Erlang在默认的YUM存储库中不可用,因此您...

用calibre和python制作电子书---Python和Git教程

calibre - E-book management是一个很强大的电子书管理软件,可以打开和转换各种格式的电子书,可以抓取新闻到本地阅读,允许用户自定义新闻源,可以通过编写自己recipe让其将网页上的内容抓取下来并且生成电子书,利用这个功能我将廖雪峰老师的Python教程和Git教程做成了epub电子书,使用firefox的epubReader插件就可...

[转]“在CMD下面执行命令需要加上exe后缀才能执行“的解决方案

在装完Python(x,y)后,在CMD中执行 python 命令结果显示没有找到命令。 Google了一下,没有找到相应的解决方案,但是竟然用Baidu到了,额。。是说系统环境变量中的 PATHEXT 项没有.EXE,但是我的系统环境变量中的PATHEXT中有.EXE的啊,突然看到旁边的用户环境变量中也有PATHEXT,但是其中没有.EXE项,哈哈,...

RobotFramework测试框架创建远程库Remote,并实现调用Ruby关键字接口

RobotFramework测试框架调用Ruby用户数据准备接口    一、安装RF Remote远程控制gem包 robot_remote_server 二、创建远程Library服务 在ruby环境完整的机器的上创建remote_library.rb文件,内容如下:   然后 ruby remote_library.rb 运行脚本; 远程robot服...

nodejs 和 js

JavaScript组成:ECMAScript(定义这门语言的基础,比如语法、数据类型、结构以及一些内置对象等)、DOM(基于ECMASCRIPT,扩展出来的用于操作页面元素的方法)、BOM(基于ECMASCRIPT,扩展出来的用于操作浏览器的一些方法)。 NodeJS是以ECMASCRIPT为基础,然后在这个基础上扩展出来的一些操作其他东西(即操作非浏览...