1 📖 《JavaScript 高级程序设计》__ 什么是 JavaScript?
前言
大家好,我是 HoMeTown,web 领域有一本神书大家应该都有看过,这本书我看过两遍,但是每次看都是粗粗的略过一些重要的知识点,甚至一些面试过程中的问题,在这本书里都能找到答案。
工作这么多年,到现在为止对这本书都没有一个系统的知识点记录,这次想从头读一遍这一本 JavaScript 高级程序设计【第 4 版】,并把重要的知识点
记录下来,同时加上自己的见解,共勉之!
关注专栏,一起学习吧~
参考文献
JavaScript 高级程序设计(第 4 版)
JavaScript?
1995年
JavaScript 问世,刚开始的主要用途是做输入验证,也就是表单验证
,后来 JavaScript 被网景公司加入到 Navigator 浏览器中,从此 JavaScript 成为主流浏览器的标配。
如今 JavaSciprt 已经被广泛使用,场景包括但不局限于桌面浏览器
手机浏览器
服务端
屏幕阅读器
,也能实现复杂的计算机计算与交互。
历史回顾
1995年
,网景公司里一个叫Brendan Eich
的工程师开发了Mocha(后来改名为LiveScript)
脚本语言,为了赶时间与 Sun 公司组成开发联盟,共同完成了LiveScript
脚本语言,正式上线之前,为了蹭当时Java
的热度,改名为JavaScript
。
1996年
,微软决定带着Internet Explorer(IE)
重磅进入 Web 浏览器领域,微软推出的IE3
其中包含名为JScript
的 JavaScript 实现。2022 年,IE
正式退出了历史舞台。
微软的JavaScript
与 网景JavaScript
出现了两个版本的JavaScript
,还没有规范的语法与特性标准,出现了冲突,随之,JavaScript 走上了标准化
的征程。
1997年
,JavaScript1.1
作为提案,提交给欧洲计算机制造商协会(Ecma)
,委员会TC39(来自各个厂牌的顶级工程师)
负责标准化任务
,推出了ECMA-262
,也就是ECMAScript
这个新的脚本语言标准。
1998年
,国际标准化组织(ISO)
和国际电工委员会(IEC)
将ECMAScript
采纳为标准ISO/IEC-16262
,从此,各个厂牌浏览器开始以ECMAScript
作为自己 JavaScript 实现的一句,但是具体实现还是有所不同,安排的工期有所不同,于是出现了浏览器兼容问题。(此处 que 一下 IE)。
JavaScript 实现
JavaScript 在开发的过程中远远不值ECMA-262
定义的那样,而是基于ECMA-262
做了更广的延伸,完整的 JavaScript 包含:
ECMAScript
DOM
BOM
ECMAScript
ECMAScript
不局限于浏览器,ECMA-262
只是将这门语言作为基准来定义,其中只定义了:
语法
类型
语句
关键字
保留字
操作符
全局对象
ECMAScript 的版本
ECMA-262 第1版
删除各个厂牌的特定代码,要求支持 Unicode,而且内置对象与平台无关。
ECMA-262 第2版
编校工作,为了符合ISO
& IEC
的要求
ECMA-262 第3版
第一次真正对标准进行更新,更新字符串处理、错误定义和数值输出
,增加正则表达式、控制语句、try/catch
,标志着ECMAScript 作为一门真正的变成语言的时代要来了
。
ECMA-262 第4版
一次彻底修订,重新召集TC39
,包括强类型变量、新语法和数据结构、类、继承以及操作数据的方法
,但是,TC39 的子委员
会中人觉得跳动太大了,修改的太多,提交了一个改动较少的提案ECMAScript 3.1
,TC39 觉得还不错,第 4 版就被废除了,不然我们应该说从ES4
开始就推出了类
的概念。
ECMA-262 第5版
就是ECMAScript 3.1
,2009 年 12 月 3 日发布,新增解析&徐丽华JSON数据的JSON对象,新的严格模式
,2011 年 6 月对这个版本补充了一个修订版,无新增功能,只改了一些规范中的错误。
ECMA-262 第6版
俗称ES6、 ES2015
,2015 年 6 月发布,对ECMAScript
来说,这一版具有重要意义,正式支持了类、模块、迭代器、生成器、箭头函数、代理等数据类型
(鄙人 2016 年入行,时机很好)
ECMA-262 第7版
俗称ES7、ES2016
,2016 年 6 月发布,仅包含少量语法层面的增加(e.g. Array.prototype.includes)
ECMA-262 第8版
俗称ES8、ES2017
,完成与 2017 年 6 月,增加了async/await、Object.values/entries
,明确支持对象字面量最后的逗号,因为好多服务端语言中,是不支持字典后面还有逗号的。
ECMA-262 第9版
俗称ES9、ES2018
,2018 年 6 月发布,新增异步迭代、rest、Promise.finally
等
ECMA-262 第10版
俗称ES10、ES2019
,2019 年 6 月发布,新增Array.flat()/flatMap()、String.prototype.trimStart/trimEnd
等等等等
ECMA-262 第11版
,俗称ES11、ES2020
,2020 年 6 月发布,新增类的私有属性 #、动态 import导入、bigInt、globalThis
这个 globalThis 我还真不知道,看了一下,浏览器中:
node 环境中:
ECMA-262 第12版
,俗称ES12、ES2021
,2021 年 6 月发布,新增逻辑操作符 ?? ?. !.
等,这个运算符真的很香,用法 戳这里
JavaScript、ECMAScript、ECMA-262 三者之间的关系
ECMAScript 只是对实现ECMA-262
这个规范描述的所有方面的一门语言的称呼,JavaScript 实现了 ECMAScript。
ECMAScript 符合性
要成为 ECMAScript 的实现,必须满足以下条件:
满足 ECMA-262 中描述的所有
类型、值、对象、属性、函数、以及语法和语义
支持
Unicode
字符标准
初次之外可以在此基础上进行扩展
DOM
文档对象模型(Documnet Object Model),DOM 将页面抽象问一组分层节点,HTML 或者 XML 页面每个元素都是一个节点(虚拟 DOM?),比如:
会被抽象成这样:
虚拟 DOM 实锤。
DOM 通过创建表示文档的树,开发者通过一些 DOM API 完成增删改查。
为什么要搞 DOM?
可以在不刷新的情况下修改页面外观和内容。问题是,两大厂牌微软
和网景
又搞出了两个不同的动态 HTML 策略,也就意味着,你写同样一个 HTML,无法在浏览器中通过 DOM API 修改内容,得到一样的效果。因为他们抽象 HTML 的方式不同。
因此,万维网联盟(俗称 W3C,World Wide Web Consortium)开始制定 DOM 标准,1998 年 10 月,DOM 1 级 成为 W3C 的推荐标准。
DOM 级别
DOM 1级
的目标是映射文档结构,有DOM Core
和DOM HTML
两个模块组成,前者提供一种映射 XML 文档,从而方便访问和操作文档任意部分的方式,后者扩展了前者,增加了特定于 HTML 的对象和方法。
DOM 2级
新增了以下模块:
DOM视图
描述追踪文档不同视图的接口DOM事件
描述事件及事件处理的接口DOM样式
描述处理元素 CSS 样式的接口DOM遍历和范围
描述遍历和操作 DOM 树的接口
DOM 3级
增加了以同一的方式加载和保存文档的方法
平时我们其实还是DOM 2级
用的会比较多一点
BOM
浏览器对象模型(Browser Object Model),操作浏览器的窗口,开发者可以控制浏览器显示页面之外的部分。它是没有相关标准的 JavaScript 实现,包括:
弹出新浏览器窗口
移动、缩放和关闭浏览器
navigator 对象,提供关于浏览器的信息
location 对象,提供浏览器加载页面的信息
screen 对象,提供关于用户屏幕分辨率的信息
performance 对象,提供浏览器内存占用、导航行为、时间统计的信息
对 cookie 的支持
其他自定义对象,比如 XMLHttpRequest 等
因为很长时间都没有标准,各个厂牌浏览器都是自己实现自己的 BOM,有一些默契的约定俗成,比如 window 对象和 navigator 对象,而且大家都会给他们定义自己的属性和方法,HTML5 出现以后,各个厂牌应该会日趋一致。
总结
JavaScript 由三个部分组成:
ECMAScript
由ECMA-262
定义并提供核心功能文档对象模型DOM
提供与网页内容交互的方法和接口浏览器对象模型BOM
提供与浏览器交互的方法和接口
JavaScript 的三个部分得到了 5 大浏览器(IE、Firefox、Chrome、Safari 和 Opera)不同程度上的支持,谁支持的最差,大家也都清楚。ES5 基本基本都支持,ES6 向上的,也都在慢慢完善。DOM 基本都支持。BOM 大家也都假定存在很大一部分的公共特性。
下次见~ 我的朋友,我是
HoMeTown
👨💻,➕我 VX,💊你进群,这是一个大家共同成长、共同学习的社群!在这里你可以:讨论技术问题、了解前端资讯、打听应聘公司、获得内推机会、聊点有的没的。👉 vx:
hometown-468
【单独拉你】👨👩👧 公众号:
秃头开发头秃了
【关注回复“进群”】
版权声明: 本文为 InfoQ 作者【HoMeTown】的原创文章。
原文链接:【http://xie.infoq.cn/article/4edcb0ffbd65fef1e9ef44615】。文章转载请联系作者。
评论