Node入门(2):Node.js 的全局对象

简介: 本文主要介绍了 Node.js 中的全局对象,以及模块化的一些知识。

在学习 Javascript 之初,会接触一个概念:JS 由三部分组成,DOM + BOM + ECMAScript。其中前两者是宿主环境,也就是浏览器所提供的能力。后者才是 JS 语言本身的标准。

在上篇文章《Node.js入门(1):安装和简介》中,提到了 Node.js 本质是 JS 的一个运行时,所以学习 Node.js 时,除了我们已经掌握的 JS 基础功底,还要了解 Node.js 宿主环境提供的一些能力。

windows 和 global

全局对象是 Javascript 中永远存在的对象,它是一个存在于全局作用域的对象

但是在不同的宿主环境中,有不同的实现。

window 对象是浏览器中的全局对象。任何全局变量或者全局函数都可以通过 window 的属性来访问。比如 window.console.logwindow.setTimeout,由于它们本身是全局变量,可以直接访问,比如 console.logsetTimeout

在 Node.js 中,全局对象叫作 global

Node 中的全局对象

首先来看下 Node.js 提供了哪些全局对象。

打开终端,输入 node ,进入 REPL 环境,打印 global 对象:

打印的都是一些以前在浏览器中见过的方法:

  • clearInterval
  • clearTimeout
  • setInterval
  • setTimeout
  • clearImmediate
  • setImmediate
  • queueMicrotask:创建一个微任务
  • performance:获取性能相关的指标信息

除了打印出来的这些,像以前在 JS 中常用的 Object 对象,Math 对象,Date 对象等等,在 Node.js 中这些都可用。

Node.js 中还有一些它独有的全局对象,比如:

  • Buffer:用来处理二进制数据
  • process:表示当前的 nodejs 进程

CommonJS 规范

早期的 JavsScript 是没有模块化规范的,大都是使用社区的规范,比如 AMD,CMD,是用在浏览器环境的中模块化规范,直到后来 ES6 发布了语言标准的 ES Module 模块化规范。

而在 Node.js 中,所采用的是 CommonJS 模块化规范,它定义了 如何创建一个模块,如何导出模块,如何导入模块

  • 定义模块:一个 js 文件就是一个模块
  • 导出:统一使用 module.exports 导出
  • 导入:使用 require 方法导入一个模块

所以,除了挂载在 global 对象下的全局对象,还有一些特殊的、只能在模块中使用的全局对象对象或方法

  • require:导入模块
  • module:模块定义
  • exports:是 module.exports 的别名,即 module.exports === exports
  • __dirname:获取当前文件的绝对路径
  • __filename:获取当前文件完整路径和文件名称

这些方法并没有挂载到 global 对象上,但依然属于全局对象,可以说,它们是和 global 同级别的存在。

小结

本文简单介绍了 Node.js 中的常用的全局对象,有和浏览器平台一致的,也有自己独有的,比如 Buffer 和 process。

除此之外,由于 Node.js 采用了 CommonJS 模块化规范,还有一些特殊的全局对象,只能应用在模块( JS 文件)中,比如 requiremodule 等。这个下一节会讲到。

目录
相关文章
|
6天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
17 3
|
19天前
|
JavaScript
JS 获取对象数据类型的键值对的键与值
JS 获取对象数据类型的键值对的键与值
|
28天前
|
JavaScript 前端开发
Math对象:JavaScript中的数学工具
Math对象:JavaScript中的数学工具
27 1
N..
|
1月前
|
存储 JavaScript 前端开发
JavaScript中的对象
JavaScript中的对象
N..
10 0
|
22天前
|
JavaScript 算法
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
|
22天前
报错/ ./node_modules/axios/lib/platform/index.js Module parse failed: Unexpected token (5:2)怎么解决?
报错/ ./node_modules/axios/lib/platform/index.js Module parse failed: Unexpected token (5:2)怎么解决?
|
8天前
|
JavaScript 前端开发 开发者
JavaScript中的错误处理:try-catch语句与错误对象
【4月更文挑战第22天】JavaScript中的错误处理通过try-catch语句和错误对象实现。try块包含可能抛出异常的代码,catch块捕获并处理错误,finally块则无论是否出错都会执行。错误对象提供关于错误的详细信息,如类型、消息和堆栈。常见的错误类型包括RangeError、ReferenceError等。最佳实践包括及时捕获错误、提供有用信息、不忽略错误、利用堆栈信息和避免在finally块中抛错。
|
13天前
|
JavaScript
【Js】检查Date对象是否为Invalid Date
【Js】检查Date对象是否为Invalid Date
16 0
|
14天前
|
存储 JavaScript 前端开发
JavaScript的引用数据类型主要包括对象
【4月更文挑战第16天】JavaScript的引用数据类型主要包括对象
18 4
|
18天前
|
小程序 开发工具 开发者
【微信小程序】微信开发者工具 引用 vant-weapp时“miniprogram/node_modules/@babel/runtime/index.js: 未找到npm包入口文件” 解决办法
【微信小程序】微信开发者工具 引用 vant-weapp时“miniprogram/node_modules/@babel/runtime/index.js: 未找到npm包入口文件” 解决办法
22 1