JavaScript 运行环境

警告
本文最后更新于 2023-10-22,文中内容可能已过时。

JavaScript 运行环境

JavaScript 作为一种脚本语言有多种解释器环境:

  • 浏览器中的 JavaScript 引擎:不同的浏览器使用不同的 JavaScript 引擎来解释和执行 JavaScript 代码。例如,Chrome 浏览器使用 V8 引擎,Firefox 使用 SpiderMonkey 引擎,Safari 使用 JavaScriptCore 引擎等。

  • Rhino:这是一个基于 Java 的 JavaScript 解释器,它允许在 Java 虚拟机(JVM)上运行 JavaScript 代码。Rhino 提供了许多扩展和接口,使得 JavaScript 能够与 Java 代码进行交互。

  • Nashorn:这是一个由 Oracle 开发的 JavaScript 引擎,它从 Java 8 开始作为 JVM 的一部分。Nashorn 提供了在 Java 平台上运行 JavaScript 代码的功能,并支持将 JavaScript 代码嵌入到 Java 应用程序中。

除了以上提到的解释器,还有其他一些 JavaScript 解释器和运行时环境,每个都有自己的特点和用途。比如 Node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,用于在服务器端运行 JavaScript 代码。它允许开发人员使用 JavaScript 编写服务器端应用程序,并具有许多内置的模块和函数,使得开发和管理服务器端应用程序变得更加简单和高效。

Node 环境跟浏览器环境的区别

Node.js 环境和浏览器环境有一些不同点,以下是其中一些主要的区别:

  • JavaScript API:Node.js 提供了一组专门用于服务器端开发的 API,如文件系统访问、网络通信、操作系统接口等。而浏览器环境则提供了与 DOM(文档对象模型)相关的 API,用于操作网页内容和与用户交互。

  • 全局对象:在浏览器环境中,全局对象是window,而在 Node.js 环境中,全局对象是global。两者有一些差异,如全局对象中可用的属性和方法不同。

  • 模块系统:Node.js 使用 CommonJS 模块系统,通过requiremodule.exports来导入和导出模块。而在浏览器环境中,通常使用 ES Modules(ESM)模块系统,通过importexport来进行模块的导入和导出。

  • 网络通信:Node.js 提供了一些用于网络通信的模块,如 HTTP、TCP、UDP 等,方便服务器端进行网络操作。而浏览器环境中,可以使用浏览器提供的 XMLHttpRequest 或 fetch API 来进行网络请求。

  • 文件系统访问:Node.js 提供了文件系统模块(如 fs 模块),用于在服务器端进行文件的读写和操作。而在浏览器环境中,由于安全限制,不能直接访问本地文件系统。

这些是 Node.js 环境和浏览器环境之间的一些主要区别,开发人员需要根据具体的应用场景和需求选择合适的环境。

在 Node.js 的顶层环境中,即在模块的全局作用域中,this指向一个空对象({}),而不是全局对象(如浏览器中的window或 Node.js 中的global)。这是为了避免在模块中意外地访问全局对象的属性和方法。因此,在顶层环境中使用this并不常见,建议使用其他方式来访问模块中的变量和函数。

因此,我们在学习 JavaScript 的过程中,一定要注意当前 Javascript 环境,避免混淆。

在 Webstorm 编写 JavaScript 脚本然后直接运行时,使用的是 Node.js 的解释器,跟编写 Python 脚本类似,体验非常好。如果想在 Webstorm 中直接以浏览器环境调试 JavaScript 代码,则需要将 JavaScript 代码放到 html 文件中,然后通过 WebStorm 内置的 Web 服务来访问页面并调试,具体的操作请看《WebStorm 小技巧》的如何调试 html 文件中的JavaScript脚本小节,体验也非常好。比直接在 Chrome 的开发者模式下的 Console 中编写代码然后调试效率高很多。

0%