写点什么

1 📖 《JavaScript 高级程序设计》__ 什么是 JavaScript?

作者:HoMeTown
  • 2023-01-17
    北京
  • 本文字数:3057 字

    阅读完需:约 10 分钟

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 CoreDOM 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【单独拉你】

👨‍👩‍👧 公众号:秃头开发头秃了 【关注回复“进群”】

发布于: 刚刚阅读数: 4
用户头像

HoMeTown

关注

还未添加个人签名 2022-12-29 加入

还未添加个人简介

评论

发布
暂无评论
1 📖 《JavaScript高级程序设计》__ 什么是JavaScript?_JavaScript_HoMeTown_InfoQ写作社区