前言
JavaScript是目前前端开发中最流行的语言,在学习的过程中会遇到各种JS有关的名词。本文章的主要目的是介绍ECMAScript(or ES)、CommonJS、Node.js、Vue.js或AngularJS等与JavaScript之间的联系。
ECMAScript
ECMAScript和JavaScript的关系是,前者是后者的规范,后者是前者的一种实现(另外的实现还有Jscript 和ActionScript等)。
JavaScript的创造者Netscape公司,将JavaScript提交给国际标准化组织ECMA,希望这种语言能够成为国际标准,标准委员会最终决定,标准在每年的6月份正式发布一次,作为当年的正式版本。
目前的几乎所有的浏览器(不包括低版本的IE),都已经支持ES5了,而写代码时最好采用ES6语法(毕竟语法糖写起来更舒服,还添加了很多必要的新特性,而且浏览器全面支持ES6是迟早的事)。不用担心浏览器不能识别新语法,Bable就是用来解决这种问题的工具。
Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在浏览器环境运行。
1 | // 转码前 |
Node.js
在介绍CommonJS之前有必要先介绍一下Node.js。首先明确一点,JavaScript和Python一样,是一种脚本语言,或者是解释型语言,和C、C++ 这种需要编译成可执行文件再运行的语言不同,它的运行只需要解释器能够解释执行即可,而不需要编译器。浏览器就包含了解释执行网页中的JavaScript代码的功能。
伴随着互联网和JavaScript语言的快速发展,人们不仅仅局限于拿JS来做前端开发,所以Node.js随之应运而生。Node.js作为一个后端的Javascript运行环境(解释器),这意味着你可以编写系统级或者服务器端的Javascript代码,交给Node.js来解释执行。
Node.js采用了Google Chrome浏览器的V8引擎(C++编写),性能很好,同时还提供了很多系统级的API,如文件操作、网络编程等。浏览器端的Javascript代码在运行时会受到各种安全性的限制,对客户系统的操作有限。相比之下,Node.js则是一个全面的后台运行时,基于Javascript提供了其他语言能够实现的许多功能。
CommonJS
可以说CommonJS和Node.js的关系是,前者是后者的规范,后者是前者的一种实现。
ECMAScript提供核心语言功能,浏览器端的JavaScript实现包括了ES核心、DOM(or Document Object Model)和BOM(or Browser Object Model),所以你在浏览器的JS控制台可以使用document、window、alert...
等有关DOM和BOM的操作。
而CommonJS主要为非浏览器的应用定义一套API(比如Node应用),从而填补了空白。它的终极目标是提供一个类似Python、Ruby和Java的标准库。
可以看到在Node环境中没有定义alert
和document
,因为Node不关心DOM和BOM操作。
1 | ➜ node |
但是它可以调用读取文件的函数,读取出了a.txt
中的Hello!
并打印,这是浏览器做不到也不应该去做的。
1 | ➜ node |
Vue.js、AngularJS…
这些没什么好说的,之所以带上JS就是因为它们是用JavaScript语言开发的框架,实际上就是个JS库,用于简化我们前端代码的编写。
至于为什么使用Vue.js这些框架需要安装Node.js,原因也很简单,因为很多工具(比如Babel、webpack)都是用Node开发出来的,这也是你为什么可以用npm
安装的原因。