【JavaScript】浅谈JavaScript
本人有两年的前端开发经验,对前端知识也是有一个浅浅的认知。最近打算重新或者更深入的去了解JavaScript这门语言,以下言论都是参考 红宝书和网上一些博客(如有引用必附链接)总结归纳,如果我的言论有误或触犯到他人利益,欢迎评论,我会加以改正或删除。
一般理解的JavaScript
我们大众理解的JavaScript一般指的是ECMAScript(ES),但是实际上JavaScript远远不限于ECMAScript,但是值得肯定的是ECMAScript是JavaScript的核心。
完整体的JavaScript
核心(ECMAScript)
文档对象模型(DOM)
浏览器对象模型(BOM)
ECMAScript
ECMAScript,即ECMA-262定义的语言,并不局限于Web浏览器。事实上,这门语言没有输入和输出之类的方法。ECMA-262将这门语言作为一个基准来定义,以便在它之上再来构建更稳健的脚本语言。web浏览器只是ECMAScript实现可能存在的一种宿主环境(host environment)。宿主环境提供ECMAScript的基准实现和与环境自身交互必需的扩展。扩展(比如DOM)使用ECMAScript核心类型和语法,提供特定于环境的额外功能。其他宿主环境还有服务器端JavaScript平台Node.js和即将被淘汰的Adobe Flash。
如果不涉及浏览器的话,ECMA-262到底定义了什么?在基本的层面,它描述这门语言的如下部分:
- 语法
- 类型
- 语句
- 关键字
- 保留字
- 操作符
- 全局对象
ECMAScript只是对实现这个规范描述的所有方面的一门语言的称呼。JavaScript实现了ECMAScript,而Adobe ActionScript同样也实现了ECMAScript。
目前使用和讨论最多的是ECMA-262第6版,俗称ES6、ES2015或ES Harmony(和谐版),于2015年6月发布。这一版包含了大概这个规范有史以来最重要的一批增强特性。ES6正式支持了类、模块、迭代器、生成器、箭头函数、期约、反射、代理和众多新的数据类型。
(摘自 “红宝书” 第一章 1.2.1)
DOM
文档对象模型(DOM,Document Object Model)是一个应用编程接口(API),用于在HTML中使用扩展的XML。
关于HTML和XML的关系,可以参考这篇文章,https://blog.csdn.net/wlj323/article/details/48501353。
在我的理解中,DOM就是浏览器提供的一种操控文档对象的API的统称。
像我们所熟知的document就是目前主流浏览器所提供的API对象(所以除了JavaScript可以访问以外还有很多其他语言也能访问)。
有过小程序开发经验的应该都知道在小程序里面是不能使用document操控文档对象的,从而有些博主就说小程序里面没有dom,我个人的理解来说这句话是不严谨的,就拿微信小程序来说,他提供了wx.createSelectorQuery()让我们来操作dom,我们只能说小程序里面的标准不支持使用document对象,但是你并不能说他没有DOM。(个人观点 不喜勿喷 欢迎讨论)
BOM
浏览器对象模型(BOM)API,用于支持访问和操作浏览器的窗口。使用BOM,开发者可以操作浏览器显示页面之外的部分。而BOM真正独一无二的地方,当然也是问题最多的地方,就是它是唯一一个没有相关标准的JavaScript实现。HTML5改变了这个局面,这个版本的HTML以正式规范的形式覆盖了尽可能多的BOM特征。由于HTML5的出现,之前很多与BOM有关的问题都迎刃而解。
总体来说,BOM主要针对浏览器窗体和子窗体(frame),不过人们通常会把任何特定于浏览器的扩展都归在BOM的范畴内。比如,下面就是这样的扩展:
- 弹出新浏览器窗口的能力;
- 移动、缩放和关闭浏览器的能力;
- navigator对象,提供关于浏览器的详尽信息;
- location对象,提供浏览器加载页面的详尽信息;
- screen对象,提供关于用户屏幕分辨率的详尽信息;
- performance对象,提供浏览器内存占比、导航行为和时间统计的详尽信息;
- 对cookie的支持;
- 其他自定义对象,如XMLHttpRequest和IE的ActiveXObject。
因为在很长时间内都没有标准,所以每个浏览器实现的都是自己的BOM。有一些所谓的事实标准比如对于window对象和navigator对象,每个浏览器都会给他们定义自己的属性和方法。现在有了HTML5,BOM的实现细节应该会日趋一致。关于BOM,后面会再专门详细介绍。
(以上摘自于“红宝书”第一章 1.2.3)