W3C 标准、 ECMAScript 规范与JavaScript 什么关系 ?
在前端知识体系中,我是把 Web 标准放在第 1 位的。对于初学者,可能会对 W3C、ECMAScript 和 JavaScript 的内容和关系搞不清楚,这里简单为大家梳理一下。
什么是标准?标准制定后可以告知负责实现该技术的程序员,有哪些特性是必须提供的,以及它们应该如何实现。比如由 W3C (World Wide Web Consortium) 制定的 CSS 2.1 标准,由 ECMA 制定的 ECMAScript 规范。在遵循标准的前提下实现的技术才能被大众普遍使用。
-
W3C 标准 由万维网联盟(W3C)负责管理,网站地址 w3.org, W3C 中国
- HTML、 CSS、文档对象模型 (DOM)、HTTP、Accessibility、Graphics(Canvas、SVG、WebGL)
- 安全、Web API、本地化(L10n)和国际化(I18n)
- Media(Web 媒体技术)、Performance(Web 性能、WebAssembly)
-
ECMAScript 规范 由 Ecma国际 制定, 网站地址 ecma-international.org
- JavaScript
Building unified documentation for the web (2017.10.18)
2017 年, W3C、微软、谷歌将文档都迁入了 MDN, MDN 也改名了叫 MDN Web Docs,所有的Web技术文档都在 Web 开发技术[MDN],GitHub上的 MDN Web Docs
W3C 标准
这里是所有的标准和草案: ALL STANDARDS AND DRAFTS。从筛选项可以看到标准的成熟过程:
- Recommendation - 推荐
- Proposed Edited Recommendation - 提案推荐(已编写)
- Proposed Recommendation - 提案推荐
- Candidate Recommendation - 候选推荐
- Working Draft - 工作草案
- Retired -已退休 不推荐
- Group Note
Group Note 是工作组的笔记,例如这篇 HTML5 Differences from HTML4 就是 W3C 组织写的 Note 告诉大家 HTML5 与 HTML4 的区别。在阅读规范时,建议先看这篇 如何阅读W3C规范 能很好的帮助理解。目前只有几篇翻译成了中文,已翻译标准列表。
这里举个例子,在 HTML 5.2 规范中对于 隐藏元素(Hidden elements)的规范。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @namespace url(www.w3.org/1999/xhtml); [hidden], area, base, basefont, datalist, head, link, meta, noembed, noframes, param, rp, script, source, style, template, track, title { display: none; } embed[hidden] { display: inline; height: 0; width: 0; } input[type=hidden i] { display: none !important; } @media (scripting) { noscript { display: none !important; } } |
|---|
script、style、title 等标签是 display: none 的,即在页面不会渲染。浏览器供应商在实现时就会遵循这个规范,也就是我们在用浏览器渲染我们编写的 HTML 文档时,如你所见到的,这些标签在网页上不存在。
关于 W3C 指定的 Web 技术标准,在 MDN 上可以轻松的学习,在维基百科上可以看到 W3C推荐标准 的发展历史、特性、最新动态。
ECMAScript 规范
ECMAScript 是一种脚本语言规范,从 ES6 开始使用广泛,现在已经有了 ES7、ES8、ES9 了,2019 年 6 月出了 ES10。 发展历史见 ECMAScript[维基百科]。
新的规范不一定所有 JS 引擎都能支持,所以出现了 Babel 用于将 ECMAScript 2015+ 版本的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。
Babel 通过语法转换器来支持新版本的 JavaScript 语法,这些 插件 让你现在就能使用新的语法,无需等待浏览器的支持。
Web 标准 与 ECMAScript 规范
Web 标准是关于 Web 技术领域的一系列标准,包括 HTML、CSS、DOM、媒体、性能、Web API、安全、无障碍、图形等。 ECMAScript 则是一种语言规范,JavaScript 是 ECMAScript 的一种实现和扩展。
ECMAScript 与 JavaScript
1996 年初 网景推出 JavaScript , 1996 年 11 月网景正式向 ECMA(欧洲计算机制造商协会)提交语言标准。
1997 年 6 月,ECMA 以 JavaScript 语言为基础制定了 ECMAScript 标准规范 ECMA-262。JavaScript 成为了ECMAScript 最著名的实现之一[16]。
除此之外,ActionScript 和 JScript 也都是 ECMAScript 规范的实现语言。
所以是先有 JavaScript,后有 ECMAScript 规范。ECMAScript 规范是基于 JavaScript 制定的,JavaScript 是ECMAScript 规范的实现。但 ECMAScript 只是描述了语言的语法和基本对象,JavaScript 除了核心语言部分,还包括 BOM 和 DOM 的 Web API 部分。
来自 ECMAScript [维基百科]
JavaScript 是ECMAScript 规范的实现和扩展。
来自 JavaScript[维基百科]
JavaScript 已由 ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。
来自JavaScript技术概览[MDN]
JavaScript 的核心语言是 ECMAScript。
来自JavaScript 版本历史[MDN]
刚开始使用 JavaScript 需要显式地在引用时声明明确版本号,JavaScript 1.8.5 是最后一个 JS 版本,此后停止编号 JS 版本,只使用 ECMAScript 年版本, 因此我们不再担心 JavaScript 版本了,只需要关心运行时环境及其支持的内容。
来自 JavaScript[维基百科]
完整的 JavaScript 包括以下几个部分:
- ECMAScript,描述了该语言的语法和基本对象
- 文档对象模型(DOM),描述处理网页内容的方法和接口
- 浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口
来自 JavaScript技术概览[MDN]
ECMAScript 定义了:
- 语法(解析规则,关键词,流程控制,对象初始化,等等)
- 错误处理机制(throw、 try...catch,以及创建用户定义错误类型的能力)
- 类型(布尔值,数字,字符串,函数,对象,等等)
- 全局对象。在浏览器环境中,这个全局对象就是 window 对象,但是 ECMAScript 只定义那些不特定于浏览器的 API(例如,parseInt、parseFloat、decodeURI、encodeURI,等等)
- 基于原型的继承机制
- 内置对象和函数(JSON、Math、Array.prototype 方法、对象内省(自检、自我检查,introspection)方法,等等)
- Strict mode
h5新特性
如 feth
ajax是js异步技术的术语,早起相关的api是xhr,它是一个术语。
fetch是h5新增的用于网络请求标准api,它是一个api。fetch 和Xhr平级
axios是用于网络请求的第三方库,它是一个库。
-
axios和vue没关系,axios也不是随着Vue的兴起才广泛使用的,axios本身就是独立的请求库,跟用什么框架没关系;而且最初Vue官方推荐的请求库是vue-resouce,后来才推荐的axios;
-
axios不是xhr的子集,axios利用xhr进行了二次封装的请求库,xhr只是axios中的其中一个请求适配器,axios在nodejs端还有个http的请求适配器;axios = xhr + http;
es6新特性
如promise