nodejs第三天(全域性物件)

小烜同學發表於2017-10-25

前兩天看了Node的一些基本的東西,最後還是落到實處,看點實質性的東西。我們來看一看Node中的全域性物件。

一、 global全域性物件

  就如同瀏覽器中的window一樣,在Node中把一些全域性都能夠訪問的變數方法都放到了global中。我們可以在node的REPL中輸入global來看一看裡面到底有些什麼東西。

  多的就不貼了,在global中我們可以發現幾個全域性物件: consoleprocessglobal 等等。當然了在global中還有幾個全域性的函式: timer相關Bufferrequire。還有就是全域性變數:__filename__dirname。以及我們可以看作是偽全域性變數的moduleexports 等等。

  在瀏覽器中,我們直接定義變數是掛在到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裡面試一試就知道了。

我的是X64的處理器架構
我的是X64的處理器架構

第二個,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上用起來賊爽.....

相關文章