前两天看了Node的一些基本的东西,最后还是落到实处,看点实质性的东西。我们来看一看Node中的全局对象。
一、 global全局对象
就如同浏览器中的window一样,在Node中把一些全局都能够访问的变量方法都放到了global中。我们可以在node的REPL中输入global来看一看里面到底有些什么东西。
多的就不贴了,在global中我们可以发现几个全局对象: console 、 process 、 global 等等。当然了在global中还有几个全局的函数: timer相关 、 Buffer 、 require。还有就是全局变量:__filename 、 __dirname。以及我们可以看作是伪全局变量的module 、 exports 等等。
在浏览器中,我们直接定义变量是挂在到window上的,但是在node中我们直接定义的变量是在模块中定义的,是在global中拿不到的,如果你想试一试去拿那就直接global.a = 1;这样就可以从全局变量中拿到定义的变量了。
二、 console
这个大家应该用的很多了,毕竟调试什么的console还是很靠谱的东西。console.log()以及console.info()这两个应该是使用频率是最高的。还有两个是我在做算法测试的时候经常会用到的两个console,一个是console.time(label),一个是console.timeEnd(label),标签里是一对的,相同的label就会启动一个定时器与停止一个定时器并计时,这也是感觉比较实用的一个console。
三、 process
The process object is a global that provides information about, and control over, the current Node.js process. As a global, it is always available to Node.js applications without using require().
看一下文档里对process的描述,这是一个global对象,提供了一些当前进程的信息以及控制方法。而且这是一个global对象,在使用的时候不需要require。那么我们可以看出来这个对象是用来看当前进程的信息和控制的作用的,知道是干嘛的了,一切就很明了了。下面就来看看他有哪些变量和方法是常用的,至于process的事件就先不去看了。
首先,我们来看第一个process.arch,从字面意思上就可以看出来这是描述处理器架构的,我们可以在REPL里面试一试就知道了。
第二个,process.argv,这是一个数组,里面包含了启动Node.js进程的命令行参数。我们来自己写代码看一看:
于是乎我们看到了这样的输出,我们看看每一行输出的是什么,第一行是启动这个文件的命令,也就是node所在的地方,第二个就是当前执行的这个文件的路径,然后后面就是我们跟上的参数。所以我们也就知道了process.argv里面存的是什么了,数组前两项存的就是node的地址和执行文件的地址,在后面就是各种参数了。而process.argv0是存的Node.js启动时传入的argv[0]参数值的一份只读副本。
process.argv文档中也说了第一个参数就是process.execPath,所以我们也能够很清晰的知道,这个参数代表着什么意思了。不多说,下面一个要看的是process.execArgv,这个属性返回的是在node命令后的特定命令行选项。
可以看到这个变量里存的就是node命令之后的一些特定命令行选项。
第三点,process.env,这里面保存了我们用户环境信息,一些比较常见的比如说PATH、HOME等等,都是在这里面。
第四点,process.cwd(),返回 Node.js 进程当前工作的目录,是不是感觉和__dirname有点像,其实是有区别的,我们来执行一条命令。
__dirname返回的就是当前被执行模块的文件夹路径,而process.cwd()是node进程的工作目录,你在不同的目录执行就会得到不同的结果,这其实也表现出了process的特点,和当前进程有关。
第五个,process.nextTick,这个打算和timer里的setImmediate一起看一看,做个比较,因为感觉很像,这里就不细谈了。
今天大概总结了这么多,还是要好好的消化一下,有不对之处,望提出,共勉进步,谢谢。
PS: 不行我觉得我还要安利一波tmux,linux上用起来贼爽.....