【C1】JavaScript是什么

本文讲述了JavaScript从1995年诞生至今的发展历程,包括其最初的开发背景、ECMAScript标准的确立及其构成部分:ECMAScript、DOM和BOM的介绍。

1. JavaScript是什么

1.1 简述JavaScript

1992年,一家名为Nombas的公司开发了一种叫C–(C减减,C minus minus,简称Cmm)的嵌入式脚本语言,C–和C与C++有足够的相似性,以方便开发人员很快地学会。C–最初被捆绑在CEnvi这款软件上,它首次向开发人员展示了它的威力。由于“字母C让人害怕” ,“mm听起来太消极”,Nombas最终将C–改名为ScriptEase

当年的网速是十分令人抓狂的,因特网用户通过仅有28.8kbit/s的调制解调器来连接到网络,即使这时网页已经越来越丰富了。而让用户更绝望的是,仅仅是为了简单的表单有效性验证,客户端就要跟服务器端进行多次的往返交互,举个例子,你在填写QQ账号的申请页面,当你填完了你认为应该填的栏点击提交后,等了半分钟,网页提示你的邮箱格式不对请重新输入……恶心吧。因此当时正处于技术革新前端的Netscape开始认真考虑一种开发客户端脚本语言来解决简单的处理问题。

工作于NetscapeBrendan Eich开始为了即将在1995年发行的Netscape Navigator2.0开发一种叫做LiveScript的脚本语言,Netscape与Sun公司(Java诞生地)建立的开发联盟及时完成了LiveScript的实现。就在Netscape Navigator2.0即将正式发布前,Netscape将LiveScript改名为JavaScript,目的就是利用Java这个因特网时髦词汇,用现在的话说就是:蹭热度。Netscape的赌注最终得到回报,JavaScript从此变成了因特网的必备组件。

由于JavaScript1.0的成功,Netscape在之后发布的Netscape Navigator3.0中搭载了JavaScript1.1,而此时Microsoft决定往浏览器领域投入更多资源,在Netscape Navigator3.0发布后不久也发布了IE3.0并搭载了名为Jscript的JavaScript实现。Microsoft挺进浏览器领域这一举措导致Netscape日后蒙羞,但对于JavaScript来说,这门开发语言向前迈了一大步。

至此,3种不同版本的JavaScript诞生了:Netscape Navigator3.0的JavaScript、IE的Jscript、CEnvi的ScriptEase。不像C和Java等编程语言,JavaScript这三种版本没有一个标准去统一语法和特性,随着业界的担心和网络的发展,JavaScript的语言标准化势在必行。

1997年,JavaScript1.1被作为草案提交给欧洲计算机制造协会(ECMA),来自Netscape、Sun、Microsoft等其他对脚本编程感兴趣的公司的程序员组成的第39技术委员会(TC39)被委派去“标准化一个通用、跨平台、中立于厂商的脚本语言的语法和语义”,标准化的最终成果为ECMA-262,该标准定义了叫做ECMAScript的全新脚本语言。

在接下来几年里,国际标准化组织(ISO)和国际电工委员会(IEC)采纳了ECMAScript作为标准;从此,Web浏览器就开始努力将ECMAScript作为JavaScript实现的基础。

1.2 JavaScript的实现

1.1说到,ECMAScript修成正果成为JavaScript一个重要的标准,两者也通常被人们用来表达同样的意思,但ECMAScript并不是JavaScript唯一的部分,也不是唯一被标准化的部分。实际上,一个完整的JavaScript是由三个不同部分组成的:核心(ECMAScript)、文档对象模型(DOM)、浏览器对象模型(BOM)。

![这里写图片描述](https://img-blog.youkuaiyun.com/20171214204718284?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1NETmNpcmN1bGFy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

1.2.1 ECMAScript

不像ScriptEase绑定在CEnvi一样,JavaScript不与任何具体浏览器绑定,除此之外,它也没有提到用于任何用户输入输出的方法。那么ECMAScript究竟是什么呢?ECMA-262标准(第2段)的描述如下:

“ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力,因此核心的脚本语言是于任何特定的宿主环境分开进行规定的……”

Web浏览器对ECMAScript来说是一个宿主环境,意思是ECMAScript可以作用于浏览器,但浏览器并不是它唯一的宿主环境。实际上还是不计其数的其他各种环境可以容纳ECMAScript的实现。那么ECMAScript在浏览器外规定了些什么呢?简单地说,ECMAScript描述了以下内容:

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 运算符
  • 对象

ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象(类似于Java中的抽象类),其他语言可以实现ECMAScript来作为功能的基准。

1.2.2 DOM

DOM(文档对象模型)是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。HTML和XML页面的每个部分都是一个节点的衍生物,以HTML为例:

<html>
    <head>
        <title>this is title</title>
    </head>
    <body>
        <p>hello world</p>
    </body>
</html>

这段代码可以用DOM绘制成一个节点层级图

![这里写图片描述](https://img-blog.youkuaiyun.com/20171214205334895?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1NETmNpcmN1bGFy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) DOM通过创建树来表示文档,从而使开发者对文档的内容和结构具有空前的控制力。用DOM API可以轻松地删除、添加和替换节点。 DOM是必不可少的。自从IE4.0和Netscape Navigator4.0开始支持不同形态的动态HTML(DHTML),开发者首次能够在不重载网页的情况下修改它的外观和内容——这是Web技术的一大飞跃,不过也带来的巨大的问题。Netscape和微软各自开发自己的DHTML,从而结束了Web开发者只编写一个HTML页面就可以在所有浏览器中访问的时期,换句话说,同一个的网页,用Chrome浏览器能打开,但用FireFox浏览器不可以。业界担心若放任Netscape和微软公司这样做,Web必将分化为两部分,每一部分只适用于特定的浏览器,因此,负责制定Web通信标准的W3C(World Wide Web Consortium)开始制定DOM。

1.2.3 BOM

IE3.0和Netscape Navigator3.0提供了一种特性——BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作。开发者使用BOM可以移动窗口、改变状态栏中的文本以及执行其他与页面不直接相关的动作。使得BOM独树一帜又令人怀疑的地方是,它只是JavaScript实现的一部分,没有任何的标准。

BOM主要处理浏览器窗口和框架,通常浏览器特定的JavaScript扩展都被看作BOM的一部分。这些扩展包括:

  • 弹出新的浏览器窗口;
  • 移动、关闭浏览器窗口以及调整窗口大小;
  • 提供Web浏览器详细信息的navigator对象;
  • 提供装载到浏览器中页面的详细信息的location对象;
  • 提供用户屏幕分辨率详细信息的screen对象;
  • 对cookie的支持;
  • 像XMLHttpRequest和IE的ActiveXObject这样的自定义对象。

由于没有相关的BOM标准,每种浏览器都有自己的BOM实现。一个基于事实的共同之处是,每个浏览器都具有一个窗口对象和导航对象,不过每种浏览器都可以为这些对象或其他对象定义自己的属性和方法。

1.3 小结

本章介绍了JavaScript这种客户端Web脚本语言。可以了解的有:

  • JavaScript是一种专为网页交互而设计的脚本语言
  • 构成JavaScript完整实现的各个部分:
    1. ECMAScript,提供核心语言功能,描述了该语言的语法和基本对象;
    2. DOM,提供访问和操作网页内容的方法和接口;
    3. BOM,描述了与浏览器进行交互的方法和接口。
  • JavaScript的历史简述;
  • 该语言各部分是如何发展而来的;
  • 历史上浏览器是如何处理各种标准的实现。

参考文献:

Nicholas C. Zakas.JavaScript高级程序设计[M].北京:人民邮电出版社,2006:1-8

Nicholas C. Zakas.JavaScript高级程序设计(第三版)[M].北京:人民邮电出版社,2012:1-9

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值