尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Node.js入门教程(二十三):全局对象

Node.js入门教程(二十三):全局对象 一、什么是全局对象JavaScript 中有一个特殊的对象称为全局对象Global Object它及其所有属性都可以在程序的任何地方访问即全局变量。在浏览器 JavaScript 中通常window是全局对象而 Node.js 中的全局对象是global所有全局变量除了global本身以外都是global对象的属性。在 Node.js 中我们可以直接访问到global的属性而不需要在应用中包含它。二、全局对象与全局变量global最根本的作用是作为全局变量的宿主。按照 ECMAScript 的定义满足以下条件的变量是全局变量在最外层定义的变量全局对象的属性隐式定义的变量未定义直接赋值的变量当你定义一个全局变量时这个变量同时也会成为全局对象的属性反之亦然。需要注意的是在 Node.js 中你不可能在最外层定义变量因为所有用户代码都是属于当前模块的而模块本身不是最外层上下文。注意最好不要使用var定义变量以避免引入全局变量因为全局变量会污染命名空间提高代码的耦合风险。三、常用全局对象__filename__filename表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径且和命令行参数所指定的文件名不一定相同。如果在模块中返回的值是模块文件的路径。// 输出全局变量 __filename 的值 console.log(__filename);执行main.js文件$ node main.js /web/com/runoob/nodejs/main.js__dirname__dirname表示当前执行脚本所在的目录。// 输出全局变量 __dirname 的值 console.log(__dirname);执行main.js文件$ node main.js /web/com/runoob/nodejs四、定时器函数setTimeout(cb, ms)setTimeout(cb, ms)全局函数在指定的毫秒ms数后执行指定函数cb。setTimeout()只执行一次指定函数返回一个代表定时器的句柄值。function printHello() { console.log(Hello, World!); } // 两秒后执行以上函数 setTimeout(printHello, 2000);执行结果$ node main.js Hello, World!clearTimeout(t)clearTimeout(t)全局函数用于停止一个之前通过setTimeout()创建的定时器。参数t是通过setTimeout()函数创建的定时器。function printHello() { console.log(Hello, World!); } // 两秒后执行以上函数 var t setTimeout(printHello, 2000); // 清除定时器 clearTimeout(t);执行后不会有任何输出因为定时器被清除了。setInterval(cb, ms)setInterval(cb, ms)全局函数在指定的毫秒ms数后执行指定函数cb。返回一个代表定时器的句柄值。可以使用clearInterval(t)函数来清除定时器。setInterval()方法会不停地调用函数直到clearInterval()被调用或窗口被关闭。function printHello() { console.log(Hello, World!); } // 每两秒执行一次以上函数 setInterval(printHello, 2000);执行结果每隔两秒输出一次直到按下Ctrl C$ node main.js Hello, World! Hello, World! Hello, World! ……五、console 对象console用于提供控制台标准输出它是由 Internet Explorer 的 JScript 引擎提供的调试工具后来逐渐成为浏览器的实施标准。Node.js 沿用了这个标准提供与习惯行为一致的console对象用于向标准输出流stdout或标准错误流stderr输出字符。console 方法序号方法 描述1console.log([data][, ...])向标准输出流打印字符并以换行符结束2console.info([data][, ...])返回信息性消息与console.log差别不大3console.error([data][, ...])输出错误消息4console.warn([data][, ...])输出警告消息5console.dir(obj[, options])检查对象并以易于阅读的格式显示6console.time(label)开始计时7console.timeEnd(label)结束计时8console.trace(message[, ...])输出当前执行的代码在堆栈中的调用路径9console.assert(value[, message][, ...])判断表达式是否为真为 false 时输出消息console.log() 示例console.log(Hello world); console.log(byvoid%diovyb); console.log(byvoid%diovyb, 1991);运行结果Hello world byvoid%diovyb byvoid1991iovybconsole.trace() 示例console.trace();运行结果Trace: at Object.anonymous (/home/byvoid/consoletrace.js:1:71) at Module._compile (module.js:441:26) at Object..js (module.js:459:10) at Module.load (module.js:348:31) at Function._load (module.js:308:12) at Array.0 (module.js:479:10) at EventEmitter._tickCallback (node.js:192:40)综合示例console.info(程序开始执行); var counter 10; console.log(计数: %d, counter); console.time(获取数据); // 执行一些代码 console.timeEnd(获取数据); console.info(程序执行完毕。);执行结果$ node main.js 程序开始执行 计数: 10 获取数据: 0ms 程序执行完毕。六、process 对象process是一个全局变量即global对象的属性。它用于描述当前 Node.js 进程状态的对象提供了一个与操作系统的简单接口。process 事件序号事件 描述1exit当进程准备退出时触发2beforeExit当 node 清空事件循环并且没有其他安排时触发3uncaughtException当一个异常冒泡回到事件循环时触发4Signal 事件当进程接收到信号时触发如 SIGINT、SIGUSR1 等process 事件示例process.on(exit, function(code) { // 以下代码永远不会执行因为 exit 事件中无法执行异步操作 setTimeout(function() { console.log(该代码不会执行); }, 0); console.log(退出码为:, code); }); console.log(程序执行结束);执行结果$ node main.js 程序执行结束 退出码为: 0退出状态码状态码名称 描述1Uncaught Fatal Exception- 有未捕获异常2Unused- 保留由 Bash 预留用于内置误用3Internal JavaScript Parse Error- JavaScript 源码解析错误4Internal JavaScript Evaluation Failure- JavaScript 源码评估失败5Fatal Error- V8 里致命的不可恢复的错误6Non-function Internal Exception Handler- 内部异常处理函数为非函数7Internal Exception Handler Run-Time Failure- 异常处理函数自己抛出了异常8Unused- 保留9Invalid Argument- 未知参数或参数没有值10Internal JavaScript Run-Time Failure- JavaScript 源码运行时抛出错误12Invalid Debug Argument- 调试参数设置错误128Signal Exits- 接收到致命信号信号代码 128process 属性序号属性 描述1stdout- 标准输出流2stderr- 标准错误流3stdin- 标准输入流4argv- 命令行参数数组5execPath- Node 二进制文件的绝对路径6execArgv- Node 可执行文件与脚本文件之间的命令行参数7env- 当前 shell 的环境变量对象8exitCode- 进程退出时的代码9version- Node 的版本10versions- 包含 node 版本和依赖的属性11config- 编译当前 node 执行文件的配置选项12pid- 当前进程的进程号13title- 进程名默认值为 node14arch- 当前 CPU 的架构arm、ia32 或 x6415platform- 运行程序所在的平台系统16mainModule-require.main的备选方法process 属性示例// 输出到终端 process.stdout.write(Hello World! \n); // 通过参数读取 process.argv.forEach(function(val, index, array) { console.log(index : val); }); // 获取执行路径 console.log(process.execPath); // 平台信息 console.log(process.platform);执行结果$ node main.js Hello World! 0: node 1: /web/www/node/main.js /usr/local/node/0.10.36/bin/node darwinprocess 方法序号方法 描述1abort()- 触发 abort 事件让 node 退出并生成核心文件2chdir(directory)- 改变当前工作进程的目录3cwd()- 返回当前进程的工作目录4exit([code])- 使用指定的 code 结束进程5getgid()- 获取进程的群组标识POSIX 平台6setgid(id)- 设置进程的群组标识POSIX 平台7getuid()- 获取进程的用户标识POSIX 平台8setuid(id)- 设置进程的用户标识POSIX 平台9getgroups()- 返回进程的群组 ID 数组POSIX 平台10setgroups(groups)- 设置进程的群组 IDPOSIX 平台11kill(pid[, signal])- 发送信号给进程12memoryUsage()- 返回 Node 进程所用的内存状况13nextTick(callback)- 一旦当前事件循环结束调用回调函数14umask([mask])- 设置或读取进程文件的掩码15uptime()- 返回 Node 已经运行的秒数16hrtime()- 返回当前进程的高分辨时间process 方法示例// 输出当前目录 console.log(当前目录: process.cwd()); // 输出当前版本 console.log(当前版本: process.version); // 输出内存使用情况 console.log(process.memoryUsage());执行结果$ node main.js 当前目录: /web/com/runoob/nodejs 当前版本: v0.10.36 { rss: 12541952, heapTotal: 4083456, heapUsed: 2157056 }七、本章小结知识点说明global 对象Node.js 的全局对象所有全局变量的宿主__filename当前执行脚本的绝对路径__dirname当前执行脚本所在目录setTimeout / clearTimeout单次定时器及其清除setInterval / clearInterval重复定时器及其清除console控制台输出对象提供日志、计时、断言等方法process进程对象提供进程控制、环境信息、系统交互等方法提示process对象是 Node.js 中最重要的全局对象之一它提供了与进程和操作系统交互的丰富接口。在编写 CLI 工具、服务监控、进程管理等场景中process对象会被频繁使用。nextTick方法在异步编程中尤其重要它允许你将回调延迟到当前事件循环结束后执行。
返回列表