W3C 标准和 ECMAScript规范

802 阅读5分钟

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是用于网络请求的第三方库,它是一个库。

  1. axios和vue没关系,axios也不是随着Vue的兴起才广泛使用的,axios本身就是独立的请求库,跟用什么框架没关系;而且最初Vue官方推荐的请求库是vue-resouce,后来才推荐的axios;

  2. axios不是xhr的子集,axios利用xhr进行了二次封装的请求库,xhr只是axios中的其中一个请求适配器,axios在nodejs端还有个http的请求适配器;axios = xhr + http;

es6新特性

如promise

参考: W3C 标准、 ECMAScript 规范与JavaScript 什么关系 ?