今天我们将探讨
Nodejs中的全局对象,这是Nodejs中重要且有趣的知识点。我们将通过生动形象的例子和风趣的风格来深入理解这些概念,并比较Nodejs中的全局对象与前端JavaScript中的全局对象之间的异同点。
全局对象是什么?
在Nodejs环境中,有一个全局对象global,它在所有模块中都是可见的,类似于前端JavaScript中的window全局对象。然而,不同于浏览器环境,Nodejs中没有浏览器窗口,所以没有类似window这样的对象。而是使用global来提供类似的功能。
// app.js
console.log(global);
在Nodejs中,当我们运行上述代码时,会输出一个包含许多全局属性和方法的对象。这些全局属性和方法是Nodejs运行时提供的基础功能。

常见的全局对象属性和方法
__dirname和__filename
__dirname是一个字符串,表示当前执行脚本所在的目录的绝对路径。而__filename则表示当前执行脚本的文件名(包含绝对路径)。
// app.js
console.log(__dirname);
console.log(__filename);
运行 node app.js,输出如下:

setTimeout和setInterval
在Nodejs中,我们可以使用setTimeout和setInterval方法来设置定时器。这两个方法在前端JavaScript中也是常见的。
// app.js
console.log("开始");
setTimeout(() => {console.log("这是一个延迟了2s的信息");
}, 2000);setInterval(() => {console.log("这个信息每过1s都会发送一次");
}, 1000);
运行 node app.js,输出如下:

process
process是一个全局对象,提供与当前Nodejs进程相关的信息和控制功能。
// app.js
console.log(process.pid); // 当前进程的PID(进程ID)
console.log(process.platform); // 当前操作系统平台
console.log(process.version); // Node.js的版本号
运行 node app.js,输出如下:

require和module.exports
在Nodejs中,我们使用require方法来引入其他模块。module.exports则用于导出当前模块的功能。
// math.js
const add = (a, b) => a + b;
module.exports = { add };// app.js
const math = require('./math');
console.log(math.add(2, 3)); // 输出 5
运行 node app.js,输出如下:

global对象的自定义属性
除了上述内置属性和方法,我们也可以在global对象上定义自己的属性。
// customGlobal.js
global.customMessage = "Hello, 我是一个自定义的global属性";
// app.js
require('./customGlobal');
console.log(global.customMessage); // 输出 "Hello, 我是一个自定义的global属性"
请注意,虽然在某些情况下全局变量可能很方便,但应谨慎使用全局变量,因为它们可能导致命名冲突和代码维护问题。
运行 node app.js,输出如下:

Nodejs全局对象global和前端JavaScript中全局对象window的异同点
共同点
无论是Nodejs中的全局对象global还是前端JavaScript中的全局对象window,它们都提供了全局作用域,并且可以在任何地方访问。
不同点
最显著的不同是,前端JavaScript中的window对象提供了许多与浏览器窗口和DOM相关的功能,比如document、navigator等。而Nodejs中的global对象主要提供了与服务器和操作系统相关的功能,比如process、require等。
此外,Nodejs中的全局对象没有window的概念,因为Nodejs是基于V8引擎的JavaScript运行时,没有浏览器的窗口概念。相反,Node.js提供了许多与服务器端开发相关的功能,比如文件系统访问、网络请求等。
总结
全局对象是Nodejs中非常重要的概念,它为我们提供了许多有用的功能和属性。通过对Nodejs中的全局对象深入了解,我们可以更好地利用Nodejs构建强大的服务器端应用程序。同时,通过与前端JavaScript中的全局对象进行比较,我们也能更清楚地理解它们之间的异同点。