面試官:說(shuō)說(shuō) Node. js 有哪些全局對(duì)象?
本文轉(zhuǎn)載自微信公眾號(hào)「JS每日一題」,作者灰灰。轉(zhuǎn)載本文請(qǐng)聯(lián)系JS每日一題公眾號(hào)。
一、是什么
在瀏覽器 JavaScript 中,通常window 是全局對(duì)象, 而 Nodejs中的全局對(duì)象是 global
在NodeJS里,是不可能在最外層定義一個(gè)變量,因?yàn)樗械挠脩?hù)代碼都是當(dāng)前模塊的,只在當(dāng)前模塊里可用,但可以通過(guò)exports對(duì)象的使用將其傳遞給模塊外部
所以,在NodeJS中,用var聲明的變量并不屬于全局的變量,只在當(dāng)前模塊生效
像上述的global全局對(duì)象則在全局作用域中,任何全局變量、函數(shù)、對(duì)象都是該對(duì)象的一個(gè)屬性值
二、有哪些
將全局對(duì)象分成兩類(lèi):
- 真正的全局對(duì)象
 - 模塊級(jí)別的全局變量
 
真正的全局對(duì)象
下面給出一些常見(jiàn)的全局對(duì)象:
- Class:Buffer
 - process
 - console
 - clearInterval、setInterval
 - clearTimeout、setTimeout
 - global
 
Class:Buffer
可以處理二進(jìn)制以及非Unicode編碼的數(shù)據(jù)
在Buffer類(lèi)實(shí)例化中存儲(chǔ)了原始數(shù)據(jù)。Buffer類(lèi)似于一個(gè)整數(shù)數(shù)組,在V8堆原始存儲(chǔ)空間給它分配了內(nèi)存
一旦創(chuàng)建了Buffer實(shí)例,則無(wú)法改變大小
process
進(jìn)程對(duì)象,提供有關(guān)當(dāng)前過(guò)程的信息和控制
包括在執(zhí)行node程序的過(guò)程中,如果需要傳遞參數(shù),我們想要獲取這個(gè)參數(shù)需要在process內(nèi)置對(duì)象中
啟動(dòng)進(jìn)程:
- node index.js 參數(shù)1 參數(shù)2 參數(shù)3
 
index.js文件如下:
- process.argv.forEach((val, index) => {
 - console.log(`${index}: ${val}`);
 - });
 
輸出如下:
- /usr/local/bin/node
 - /Users/mjr/work/node/process-args.js
 - 參數(shù)1
 - 參數(shù)2
 - 參數(shù)3
 
除此之外,還包括一些其他信息如版本、操作系統(tǒng)等
console
用來(lái)打印stdout和stderr
最常用的輸入內(nèi)容的方式:console.log
- console.log("hello");
 
清空控制臺(tái):console.clear
- console.clear
 
打印函數(shù)的調(diào)用棧:console.trace
- function test() {
 - demo();
 - }
 - function demo() {
 - foo();
 - }
 - function foo() {
 - console.trace();
 - }
 - test();
 
clearInterval、setInterval
設(shè)置定時(shí)器與清除定時(shí)器
- setInterval(callback, delay[, ...args])
 
callback每delay毫秒重復(fù)執(zhí)行一次
clearInterval則為對(duì)應(yīng)發(fā)取消定時(shí)器的方法
clearTimeout、setTimeout
設(shè)置延時(shí)器與清除延時(shí)器
- setTimeout(callback,delay[,...args])
 
callback在delay毫秒后執(zhí)行一次
clearTimeout則為對(duì)應(yīng)取消延時(shí)器的方法
global
全局命名空間對(duì)象,墻面講到的process、console、setTimeout等都有放到global中
- console.log(process === global.process) // true
 
模塊級(jí)別的全局對(duì)象
這些全局對(duì)象是模塊中的變量,只是每個(gè)模塊都有,看起來(lái)就像全局變量,像在命令交互中是不可以使用,包括:
- __dirname
 - __filename
 - exports
 - module
 - require
 
__dirname
獲取當(dāng)前文件所在的路徑,不包括后面的文件名
從 /Users/mjr 運(yùn)行 node example.js:
- console.log(__dirname);
 - // 打印: /Users/mjr
 
__filename
獲取當(dāng)前文件所在的路徑和文件名稱(chēng),包括后面的文件名稱(chēng)
從 /Users/mjr 運(yùn)行 node example.js:
- console.log(__filename);
 - // 打印: /Users/mjr/example.js
 
exports
module.exports 用于指定一個(gè)模塊所導(dǎo)出的內(nèi)容,即可以通過(guò) require() 訪(fǎng)問(wèn)的內(nèi)容
- exports.name = name;
 - exports.age = age;
 - exports.sayHello = sayHello;
 
module
對(duì)當(dāng)前模塊的引用,通過(guò)module.exports 用于指定一個(gè)模塊所導(dǎo)出的內(nèi)容,即可以通過(guò) require() 訪(fǎng)問(wèn)的內(nèi)容
require
用于引入模塊、 JSON、或本地文件。可以從 node_modules 引入模塊。
可以使用相對(duì)路徑引入本地模塊或JSON文件,路徑會(huì)根據(jù)__dirname定義的目錄名或當(dāng)前工作目錄進(jìn)行處理
參考文獻(xiàn)
http://nodejs.cn/api/globals.html
https://vue3js.cn/interview


















 
 
 










 
 
 
 