JS和NodeJS



JS从字面意义上看,单指一门编程语言,并没有对该语言的运行环境以及编译等进行描述。基于JS创建的目的,早期JS更多是指运行在浏览器中的编程语言,只有浏览器拥有对JS的运行环境以及底层编译环境

而NodeJs则是指定了JS的运行环境,指JS在V8虚拟机运行,是一种JS的运行时。NodeJs的出现使得JS可以跳出浏览器的局限,能实现几乎所有其他语言所能实现的功能

例如JS在浏览器中无法直接访问本地文件系统,但是NodeJs则可以问本地文件系统,从而进行对本地计算机的操作

虽然NodeJs和JS有区别,但两者使用的是同一种语言,因此在编程语法上几乎没有任何区别,如果你会JS,那么只需要了解一下NodeJs的相关API,即可快速开发NodeJs应用


* 关于NodeJs API

NodeJs和JS最大的区别当属API,因为传统JS是运行在浏览器中,因此API使用的是浏览器API

例如传统JS中最高级别的全局变量windows,该变量只能在浏览器JS中访问,指向的是浏览器

而NodeJs中最高级别的全局变量则为global,该变量只能在NodeJs中访问,指向的是本地操作系统

另外传统JS由于需要操作浏览器中的dom,因此有许多关于dom的api,例如选择dom的document.queryselecter等api方法,这些方法在NodeJs中均不存在。

同样由于NodeJs需要操作的是本地计算机系统,因此有许多关于本地计算机系统的api,例如os.cpus方法,查看当前计算机的cpu信息,这些api在浏览器中亦不存在


* 关于框架

许多人可能弄不清楚JS的各种框架以及这些框架存在的意义和特性

首先要搞清楚的一点,所有框架包括Vue、React、Express、Koa等等均可称为JS框架,因为这些框架均通过JS实现功能

但Vue、React等是属于前端框架,准确讲是浏览器框架,使用这些框架可快速开发一套可在浏览器使用的应用(多数是网站页面)

而Express、Koa等属于服务端框架,准确讲是NodeJs框架,使用这些框架可快速开发一套提供数据接口的后端服务

而浏览器应用+后端服务共同组成了现在的web,因此虽然同属JS框架,但浏览器框架和服务端框架是完全不同的两个方向


* 关于模块使用

浏览器JS中调用其他JS模块,通常使用<script src=""><script>标签,而在一些前端框架中则是使用import关键字或require方法

NodeJs中则只能使用import关键字或require方法

import关键字是属于EMS(ES Modules)模块引用规范,require方法则是CJS(CommonJS)模块引用规范,两者是完全不同的模块引入规范,EMS于ES2015引入,现在各大前端框架更多使用该规范,而CJS则是早期处理NodeJs模块的规范,更多应用于NodeJS框架中。

两者在使用上更多需要遵循模块本身的导出方法和配置,后续讲package.json文件时会解释。如果使用某一种规范报错,可尝试使用另一种规范引入模块


* 关于运行环境强调

传统JS,可以在html文件的script标签中编写,浏览器会自动执行该标签中的JS代码,无需额外的运行环境

而运行NodeJs则需要现在计算机中提前安装nodejs

而现在各大前端框架均需要使用node环境,因为这些框架均需要使用到nodejs来执行一些通过NodeJs实现的第三方库

如果使用传统html+css+js开发web页面,则不需要node环境


* 关于效率

由于chrom浏览器内核就是V8引擎,因此在运行效率上讲,运行在chrom浏览器中的JS和基于V8引擎NodeJS没有任何区别

但使用其他内核的浏览器和NodeJS可能会有一些效率上的差别

原文链接:,转发请注明来源!