node.js(四 --- 全局对象)
在浏览器javescript中,通常window是全局对象,而在node.js中的全局对象是global,所有的全局对象除了global本身之外,都是global对象的属性。
在node.js中同样的我们可以直接访问global的属性。
global最根本的作用是作为全部变量的宿主。若要成为全局变量需要满足一下条件:
(1): 在最外层定义的变量;
(2): 全局对象的属性;
(3): 隐式定义的变量(未定义直接赋值的变量)
_filename:
表示当前正在执行的脚本的文件名。它将输出文件所在的位置的绝对路径,且和命令行参数所指定的文件名不一定相同。如果在模块中,返回的值是模块文件的路径。
_dirname:
表示当前执行脚本所在的目录;
setTimeout(cb, ms):
该全局函数在指定的毫秒(ms)树后执行指定的函数(cd),而且该函数只执行一次指定的函数,返回一个代表定时器的句柄值。
clearTimeout(t):
该全局函数用于停止一个之前通过setTimeout()创建的定时器,参数t就是指这个定时器。
setInterval(cd,ms):
该全局函数在指定的毫秒数后执行指定的函数(cb),返回一个代表定时器的句柄值。 可以使用clearInterval(t)来清除。
console:
console用于提供控制台标准的输出,它是由internet Explorer的Jscript引擎提供的调试工具,后来逐渐成为浏览器的实施标准。 node.js用它向标准输出流(stdout)或者错误输出流(stderr)输出字符。
console对象的方法:
(1):console.log():用于向标准输出流打印字符并以换行符结束;
(2):console.info():作用是返回信息行消息;
(3):console.error():输出错误消息。控制台在出现错误时会显示是红色的叉子;
(4):console.warn(): 输出警告信息。控制台出现黄色的惊叹号。
(5):console.dir(): 用来对一个对象进行检查(inspect),并以易于阅读和打印的格式显示;
(6):console.tiem(): 输出时间,表示计开始;
(7):console.timeEnd(): 结束时间,表示计时结束;
(8):console.trace(): 当前执行的代码在堆栈中的调用路径,这个测试函数运行很有帮助,只要给想测试的函数里面加入console.trace就行了;
(9):console.assert(): 用于判断某个表达式或变量是否为真,接收两个参数,第一个参数是表达式,第二个参数是字符串。只有当第一个参数为false,才会输出第二个参数,否则不会有任何结果;
process:
该对象描述当前node.js进程状态的对象,提供了一个与操作系统的简单接口。
process属性:
(1):stdout: 标准输出流;
(2):stderr: 标准错误流;
(3):Stdin: 标准输入流;
(4):argv:该属性返回一个数组,由命名行执行脚本时的各个参数组成。它的第一个成员总是node,第二个成员是脚本文件名,其余成员是脚本文件的参数;
(5):execPath: 返回执行当前脚本的Node 二进制文件的绝对路径;
(6):execArgv: 返回一个数组,成员是命令行下执行脚本时,在node可执行文件与脚本文件之间的命令行参数;
(7):env: 返回一个对象,成员为当前shell的换将变量;
(8):exitCode: 进程退出时的代码,如果进程优通过 process.exit()退出,不需要指定退出码;
(9):version: node版本号;
(10):versions: 一个属性,包含了node的版本和依赖;
(11):config: 一个包含用来编译当前node执行文件的javascript配置选项的对象;
(12):pid: 当前进程的进程号;
(13):title: 进程名字,默认是node;
(14):arch: 当前cpu的架构:'arm'、'ia32'或者'x64';
(15):platform: 运行程序所在的平台系统'drawin'、'freebsd'、'linux'、'sunos'或'win32';
(16):mainModule: require main的备选方法。 不同点,如果主模块在运行时改变,require main 可能会继续返回老的模块;
process方法:
(1)abort(): 这将导致node触发abort事件,会让node退出并生成一个核心文件;
(2)chdir(): 改变当前工作进程的目录,如果操作失败抛出异常;
(3)cwd(): 返回当前进程的工作目录;
(4)exit(code): 使用指定的code结束进程。如果忽略,将会使用 code0;
(5)getgid(): 获取进程的群组表示;获取到的是群组的数字id,而不是名字;
(6)setgid(id): 设置进程的群组标识。
(7)getuid(): 获取进程的用户标识。这是数字的用户id,不是用户名;
(8)setuid(): 设置进程的用户标识。 接收数字ID或字符串名字,如果指定了群组名,会阻值等待解析为数字ID;
(9)getgroups(): 返回进程的群组id数组。 Posix系统不一定有,但是node.js肯定有;
(10)setgroups(groups): 设置进程的群组ID. 这是授权操作,所有要有root权限;
(11)initgroups(user, extra_group): 读取/etc/group,并初始化群组访问列表,使用成员所在群组。这是授权操也要root权限;
(12)kill(): 发送信号给进程;
(13)memoryUsage(): 返回一个对象,描述了node进程所有的内存状况,单位为字节;
(14)nextTick(callback): 一旦当前事件循环结束,调用回调函数;
(15)umask(): 设置或读取进程文件的掩码;子进程从父进程继承掩码。如果mask参数有效,返回旧的掩码。否则,返回当前掩码;
(16)uptime(): 返回node已经运行的秒数;
(17)hrtime(): 返回当前进程的高分辨时间,形式为[sconds,nanoseconds]数组。它是相对于过去的任意时间。该值与日期无关,因此不受时钟漂移的影响。主要用途是可以通过精确的时间间隔,来衡量程序的性能;
process对象最常用的成员方法:
(1): exit 当进程准备退出时触发。
(2): beforeExit 当node清空事件循环,并且没有其他安排是触发这份事件,通常来说,当没有进程安排时node退出,但是beforeExit的监听器可以异步调用,这样node就会继续执行;
(3): uncaughtException 当一个异常冒泡回到事件循环,触发这个事件。如果给异常添加了监听器,默认的操作(打印堆栈跟踪嘻嘻并退出,)就不会发生。
(4): signal事件: 当进程几首到信息时就触发。
例如:
process.on('exit',function(){ console.log('退出码为:',code)})
退出状态码:
(1): Uncaught: Fatal Exception 有未捕获异常,并且没有被域或uncaughtException处理函数处理;
(2): Unused: 保留;
(3): Internal JavaScript Parse Error: javaScript的源码启动node进程引起解析错误。
(4): Internal JavaScript Evaluation Failure: javaScript的源码启动node进程,评估时返回函数失败;
(5): Fatal Error: v8里致命的不可恢复的错误,通常会打印到stderr;
(6): Non-function Internal Exception Handler: 未捕获异常,内部异常处理函数不知为何设置为 on-function,并且不能被调用;
(7): Internal Exception Handler Run-Time Failure: 未捕获的异常,并且异常处理函数处理时自己抛出了异常。例如process.on('uncaughtException')或domain.on('error')抛出了异常。
(8): Invalid Argument: 可能是给了未知的参数,或者给的参数没有值。
(9): Internal JavaScript Run-Time Failure: javaScript的源码启动node进程时抛出错误;
(10): Invalid Debug Argument:设置了参数--debug-brk,但是选择了错误接口;
(11): Signal Exits: 如果node接收到致命信号,比如: sigkill 或 sighup,那么退出代码就是128加信号代码。