Nodejs全局对象
- 与浏览器平台的window不完全相同
- Nodejs全局对象上挂载许多属性
全局对象是JavaScript中特殊的对象
Nodejs中的全局对象是Global,Global的根本作用就是作为宿主,全局对象可以看做是全局变量的宿主。 默认情况下this是空对象,和global并不是一样的。
在自调用函数中this==global为true
console.log(this==global) //false
(function () {
console.log(this == global) // true
})()
Nodejs常见的全局变量
- __filename:返回正在执行的脚本文件的绝对路径
- __dirname:返回正在执行脚本所在目录
- timer类函数:执行顺序与事件循环间的关系
- process:提供与当前进程互动的接口
- require:实现模块的加载
- module、exports:处理模块的导出
全局变量--process
无需使用require导入即可使用,用于获取进程信息,执行进程操作。
// 1.资源:cpu内存
console.log(process.memoryUsage()) //返回内存使用情况
// {
// rss: 4935680, 进程在主内存设备(即总分配内存的子集)中占用的空间量,包括所有 C++ 和 JavaScript 对象和代码。
// heapTotal: 1826816, V8申请的总内存
// heapUsed: 650472, V8实际使用内存
// external: 49879, 绑定到 V8 管理的 JavaScript 对象的 C++ 对象的内存使用情况。
// arrayBuffers: 9386 为`ArrayBuffer`s 和 `SharedArrayBuffer`s 分配的内存,包括所有 Node.js [`Buffer`](http://url.nodejs.cn/DaXtfX)
// }
console.log(process.cpuUsage()); //返回cpu使用情况
// { user: 46000, system: 31000 }
// 2.运行环境:运行目录,node环境,cpu架构,用户环境,系统平台
console.log(process.cwd()); //当前文件运行的目录(绝对路径)
console.log(process.version) //当前node版本
console.log(process.versions) // 当前node、v8、libuv版本(为一个对象)
console.log(process.arch) // cpu架构
console.log(process.env.PATH) // 系统路径
console.log(process.env.USERPROFILE) //用户目录 MAC:HOME
console.log(process.platform) // 系统平台
// 3.运行状态:启动参数、PID、运行时间
console.log(process.argv); // node运行目录和文件运行目录
// [ 'C:\\Program Files\\nodejs\\node.exe', 'C:\\Users\\user\\Desktop\\工作文档\\parcital\\ts\\process.js']
console.log(process.argv0); // 上面数组中的第一个元素
console.log(process.execArgv); //
console.log(process.pid); //进程的pid
console.log(process.uptime()); //当前文件运行时间
// 4.事件(事件的回调函数中只能执行同步代码)
//监听事件
process.on('beforeExit', (code) => {
console.log('beforexit', code)
})
process.on('exit', (code) => {
console.log('exit', code)
})
console.log('代码实行完毕')
//运行结果:
//代码实行完毕
//beforexit 0
//exit 0
也可以直接调用
process.exit() //将不会调用beforeExit
// 5.标准输出,输入 错误
process.stdin.setEncoding('utf-8') //设置输入标准防止乱码
process.stdin.on('readable', () => { // 监听事件
let chunk = process.stdin.read() //读取输入数据
if (chunk != null) {
process.stdout.write('data' + chunk) // 控制台打印输入数据
}
})
核心模块--Path
path为Nodejs核心模块,需要使用require导入
// 1.获取路径中的基础名称
// 01.返回接收路径中的最后一部分
// 02.第二个参数表示扩展名,没有设置返回完整的文件名称带后缀,设置了返回文件名不带后缀
// 03.第二个参数没有匹配到,将会忽略第二个参数
// 04.处理路径时,路径结尾有分隔符/,则也会被忽略
console.log(path.basename(__filename))
console.log(path.basename(__filename, '.js'))
console.log(path.basename(__filename, '.css'))
console.log(path.basename('/a/b/c'))
console.log(path.basename('/a/b/c/'))
// 2.获取路径目录名(路径) (返回当前路径的上一层路径)
console.log(path.dirname(__filename))
console.log(path.dirname('a/b/c'));
console.log(path.dirname('a/b/c/'));
// 3.获取路径的扩展名
// 01.如果没有扩展名,返回空字符串
// 02.有多个扩展名,返回最后一个扩展名
console.log(path.extname(__filename))
console.log(path.extname('/a/b/c'))
console.log(path.extname('/a/b/c.js.css'))
// 4.解析路径
// 01.接收一个路径,返回一个对象,包含不同信息
// 02.root dir base ext name
const obj = path.parse('/a/b/c/index.html')
const obj = path.parse('/a/b/c/')
const obj = path.parse('./a/b/c/')
console.log(obj)
// 5。序列化路径
const obj = path.parse('./a/b/c/')
console.log(path.format(obj));
// 6.判断当前路径是否为绝对路径
console.log(path.isAbsolute('foo'))
console.log(path.isAbsolute('/foo'))
// 7.拼接路径
console.log(path.join('a/b','c','index.thml'));
// 8.规范化
console.log(path.normalize(''))
console.log(path.normalize('a/b/c/d'));
console.log(path.normalize('a//\\b/c../\\d'));
// 9 绝对路径
console.log(path.resolve());
console.log(path.resolve('/a','b'));
console.log(path.resolve('a','/b'));
console.log(path.resolve('/a','/b'));
console.log(path.resolve('a','b'));