JavaScript高级程序设计(第4版)- 第1章:什么是JavaScript

第1章 什么是JavaScript

1.1 JavaScript历史

  • 1995年:JavaScript问世
  • 1996年:JavaScript发展
  • 1997年:制定规范

在讨论JavaScript为什么会产生之前我们最好先了解一下在JS产生之前,浏览器验证表单的原理,即一次验证是需要客户端和服务器端进行一次通信的。想想那个时候大家用的都是调制解调器上网,你输入一个账户名提交表单,30秒后服务器端传来回复“输入格式错误,请重新输入”,实在让人抓狂。

因此在2015年,网景公司就在它新推出的浏览器Netscape Navigator2中开发了一个新的客户端脚本语言。主要用途就是在客户端直接处理某些基本的验证。一开始将这种脚本语言取名为Mocha(音译摩卡,Java同款咖啡名),又换成了LiveScript,最后为了蹭Java的热度改成了JavaScript。

Netscape的成功让微软一看直呼“我可以”,于是在IE3中也开发了一款JScript(看出来了,这些公司是真的不想费心思起名),在1996年进入Web浏览器领域,宣告着JS作为一门语言向前迈进了一大步。

而Netscape的JavaScript和Microsoft的JScript就存在着规范差异,因此在1997年,欧洲计算机制造商协会(ECMA)就此召集了各路神仙打造出了ECMAScript(ek-ma-script)

1.2 JavaScript实现

当然,JavaScript和ECMAScript不是一个东西,JavaScript包括以下三个部分:

  • 核心(ECMAScript):由ECMA-262定义并提供核心功能
  • 文档对象模型(DOM):由W3C规范,提供与网页内容交互的方法和接口
  • 浏览器对象模型(BOM):由HTML5规范,提供与浏览器交互的方法和接口

1.2.1 ECMAScript

ECMAScript是一个基准,Web浏览器作为其宿主环境(host enviroment),为ECMAScript提供基准实现和与环境交互必需的扩展,宿主环境还可以是服务器端Node.js这类平台。

ECMA-262标准定义了如下7个部分:

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 操作符
  • 全局对象

ECMAScript则是对实现了ECMA-262所有语言的统称

1.2.1.1 ECMAScript 版本

  • 第1版:和Netscape的JavaScript1.1相同,删除了浏览器平台特定的代码,支持Unicode标准(支持多语言)
  • 第2版:主要是编校,没有对特性的修改
  • 第3版:更新了字符串处理、错误定义、数值输出、正则表达式、新控制语句、try/catch异常处理
  • 第4版:彻底修订,包括强类型变量、新语句、数据结构、真正的类、经典继承、操作数据新手段
  • 第5版:因为第4版改动太大,因此在正式版发布前就被放弃,而之前提出的一个简单改进子版本被拿来作为第5版,于2009.12.3被发布。第5版致力于厘清第3版存在的歧义,并提出了一些新功能:原生解析、序列化JSON数据的JSON对象、方便继承和高级属性定义的方法、增强ECMAScript引擎解释和执行代码能力的严格模式等。
  • 第6版:俗称ES6、ES2015、ES Harmony,于2015.6发布,正式支持了类、模块、迭代器、生成器、箭头函数、期约、反射、代理和众多新的数据类型。
  • 第7版:2016.6发布,增强了Array、prototype、includes和指数操作符等少量新特性
  • 第8版:2017.6发布,增加了异步函数(async/await)及Atomics API等
  • 第9版:2018.6发布,更新了异步迭代、剩余、扩展属性、新的正则表达式特性等
  • 第10版:2019.6发布,解决了与JSON字符串兼容的问题等

1.2.1.2 ECMAScript符合性

要成为ECMAScript家族中的一员,必须满足两点:

  • 支持ECMA-262中描述的所有“类型、值、对象、属性、函数、语法、语义”
  • 支持Unicode字符标准

在此基础上,ECMAScript语言可以自行进行如下扩充:

  • 对类型、值、对象、函数进行扩充
  • 对程序、正则表达式语法进行扩充

1.2.1.3 浏览器对ECMAScript的支持

1.2.2 DOM

文档对象模型(Document Object Model)是个应用编程API,DOM将成个页面抽象为一组分层节点,即创建表示文档的

如下列页面代码:

<html>
    <head>
        <title>Sample Page</title>
    </head>
    <body>
        <p>Hello World!</p>
    </body>
</html>

 对应的DOM文档树就如下图所示:

1.2.2.1 DOM起因

在Netscape的Navigator 4和Microsoft的IE4中,都支持不同形态的DHTML,即不刷新页面而修改页面外观和内容,但是由于两家公司实现方式和思路不同,导致Web分裂的可能性出现,人们担心之后会出现面向浏览器开发网页的尴尬局面,于是万维网联盟(W3C,World Wide Web Consortium)站出来表示要指定DOM标准。

DOM事实上已经在很多语言中被实现了,但是在浏览器中,DOM就是由ECMAScript实现的。

1.2.2.2 DOM级别

  • DOM Level 1:目的是为了映射文档结构,包括两个部分:
    • DOM Core:提供映射XML文档,方便访问和操作文档任意部分的方式
    • DOM HTML:扩展映射Core,并增加了特定于HTML的对象和方法
  • DOM Level 2:扩展部分如下:
    • DOM视图
    • DOM事件
    • DOM样式
    • DOM遍历和范围
  • DOM Level 3:增加了DOM Load and SaveDOM Validation模块,Core完全支持了XML 1.0
  • DOM Living Standard / DOM4

1.2.2.3 其他DOM

下面语言基于HTML,有自己的DOM方法和接口

  • SVG(Scalable Vector Graphics,可伸缩矢量图)
  • MathML(Mathematical Markup Language,数学标记语言)
  • SMIL(Synchronized Multimedia Intergration Language,同步多媒体集成语言)

1.2.2.4 Web浏览器对DOM的支持情况

1.2.3 BOM

浏览器对象模型(Browser Object Model)用于支持访问和操作浏览器窗口,一直都没有相关标准制定,HTML5以尽可能规范的形式制定了一些BOM特性,但还是存在一些特性会因浏览器而异。

BOM主要针对浏览器窗口和子窗口(frame),如浏览器窗口弹出、移动、缩放、关闭、location、navigator、screen、performance对象、cookie等。

1.3 JavaScript版本

Mozilla作为Netscape的唯一仍在延续最初JavaScript版本编号的浏览器厂商,仍在不停的更新JavaScript的版本,其浏览器对应的JavaScript版本号为正统JavaScript版本号,其他浏览器对JavaScript版本的支持多数是指对应不同的ECMAScript和DOM版本号

posted @ 2022-06-21 19:00  Electric-Duck  阅读(100)  评论(0)    收藏  举报