第1章:什么是JavaScript [一起学前端]
作者是位前端切图仔,本系列旨在从头开始学习前端,巩固前端基础。同时分享学习笔记供广大同学讨论,如有编写错误或者描述问题,还请大家多多指点。
1.1 简短的历史回顾
1995年,网景公司开始为即将发布的Netscape Navigator 2开发一个叫Mocha的脚本语言。当时计划是在客户端和服务器端都使用它,它在服务器端叫LiveWire。 后来改名为LiveScript,就在发布前夕又改名为JavaScript,为了蹭上当时火热的Java。 在发布后不久,微软发布了IE3,同时推出了自己的脚本语言JScript,主要是为了避免版权问题。 在这个时期多个版本的语言共存,实现方式和语法的不同,推动了语言往规范的方向运行。 1997年,JavaScript1.1作为提案被提交给欧洲计算机制造商协会(ECMA)。第39技术委员会(TC39)承担了“标准化一门通用、跨平台、厂商中立的脚本语言的语法和语义”的任务(参见TC39-ECMAScript)。 TC39委员会由来自网景、Sun、微软、Borlan、Nombas和其他对于这门脚本语言有着兴趣的公司的工程师组成。 他们花了数月时间打造出ECMA-262,也就是后面说的ECMAScript这个新的脚本语言标准。
这里主要说明了JS产生的背景,以及大家熟知的ECMA其实是一个规范,各个厂家可以基于这个规范实现自己的语法集,所以就有了大家所熟知的各个浏览器兼容各不一样的背景。
1.2 JavaScript 实现
完整的JavaScript实现包含以下几个部分:ECMAScript、DOM、BOM
1.2.1 ECMAScript(后面简称ES)
ES只是一种技术规范,定义了这门语言的语法、类型、语句、关键字、保留字、操作符、全局对象。并不会限制运行环境,浏览器、Flash、Node只是运行的宿主环境。
-
ECMAScript版本
-
第3版是第一次真正对这个标准进行更新,更新了字符串处理、错误定义和数值输出。此外还增加了对正则表达式、新的控制语句、try/catch异常处理支持,以及为了更好地让标准国际化所做的少量修改。这个版本标志着ES作为一门真正的编程语言的时代终于到来了。
-
第4版对这门语言的一次彻底修订,在这个版本提出了很多想法和设计,在提案阶段产生了较大的冲突,有的人认为太多激进。于是这个版本拆出来两个版本,一个叫做ES3.1后来也就是ES5,还有一个版本被废弃合并到后续的草案中
-
第5版于2009年12月3日正式发布。新功能包括原生的解析和序列化JSON数据的JSON对象、方便继承和高级属性定义的方法,以及新的增强ECMAScript引擎解释和执行代码能力的严格模式。ES5在前端开发的领域持续了很长时间,包括到2024年虽然ES6在很多浏览器已经普及了,但是实际开发中还是需要编译到兼容的ES5版本,方便适应广大浏览器。
-
第6版熟称ES6、ES2015,于2015年6月发布。这一版本包含了大概这个规范有史以来最重要的一批增强特性。ES6正式支持了类、模块、迭代器、生成器、箭头函数、契约、反射、代理和众多新的数据类型。是前端面试考烂的知识点。(比如生成器、反射 这些平时项目也用不上,大家不用焦虑)
-
后面比如ES7、ES8、ES9、ES2024 等等就不说了,大家可以按照年份或者版本来区别每个版本的特性,都是一样的,比如
async/await就是在ES2017支持的
-
-
ES符合性是什么意思(就是符合ECMA-262进行实现的要求)
-
支持规范中描述的所有“类型、值、对象、属性、函数,以及程序语法于语义“
-
支持Unicode字符标准
-
【可以扩展】增加规范中未提及的”额外的类型、值、对象、属性和函数“
-
【可以扩展】支持标准中没有定义的”程序和正则表达式语法“
-
-
浏览器对ES的支持
-
2008年,五大浏览器(IE、Firefox、Safari、Chrome和Opera)全部兼容ECMA-262第3版
-
后续IE9、Chrome23、Safari9 等陆续支持了ES5,在市面上持续了很长时间
-
1.2.2 DOM
文档对象模型(DOM,Document Object Model)是一个应用编程接口(API),用于在HTML中使用扩展的XML。DOM将整个页面抽象为一组分层节点。HTML或XML页面额每个组成部分都是一种节点,包含不同的数据。
DOM Level 规范由两个模块组成:DOM Core和DOM HTML。前者提供了一种映射XML文档,从而方便访问和操作文档任意部分的方式;后者扩展了前者,并增加了特定于HTML的对象和方法。
注意:DOM并非只能通过JavaScript访问,而且确实被其他很多语言实现了。不过对于浏览器来说,DOM就是使用ECMAScript实现的,如今已经成为JavaScript语言的一大组成部分。
除了DOM Core和DOM HTML,有些其他语言也发布了自己的DOM标准。
-
可伸缩矢量图(SVG,Scalable Vector Graphics)
-
数学标记语言(MathML,Mathematical Markup Language)
-
同步多媒体集成语言(SMIL,Synchronized Multimedia Integration Language)
1.2.3 BOM
浏览器对象模型(BOM)API,用于支持访问和操作浏览器的窗口。使用BOM,开发者可以操控浏览器显示页面之外的部分。而BOM真正独一无二的地方,当然也是问题最多的地方,就是它是唯一一个没有相关标准的JavaScript实现。
HTML5改变了这个局面,这个版本的HTML以正式规范的形式覆盖了尽可能多的BOM特性。由于HTML5的出现,之前很多与BOM有关的问题都迎刃而解了。
一些特性介绍:
-
弹出新浏览器窗口的能力
-
移动、缩放和关闭浏览器窗口的能力
-
navigator 对象,提供关于浏览器的详尽信息
-
location 对象,提供浏览器加载页面的详尽信息
-
screen 对象,提供关于用户屏幕分辨率的详尽信息
-
performance 对象,提供浏览器内存占用、导航行为和时间统计的详尽信息
-
对cookie支持
-
其他自定义对象,如XMLHttpRequest 和 IS的ActiveXObject
Q&A
-
什么是ECMAScript,ECMAScript和JavaScript有什么区别?
-
文档对象模型(DOM)提供了那些方法?各个厂商实现是否一致,有什么区别?
-
浏览器对象模型(BOM)提供了那些方法?各个厂商实现是否一致,有什么区别?