變數

Node.js 變數

函式方法

變數 說明
typeof 變數類型
instanceof 類別類型
constructor 建構值

typeof 變數類型

console.log(typeof undefined) // undefind
console.log(typeof null)      // object
console.log(typeof true)      // boolean
console.log(typeof 43)        // number
console.log(typeof '21')      // string
console.log(typeof {a:1})     // object
console.log(typeof [1])       // object
console.log(typeof Symbol())  // symbol
console.log(typeof 123n)      // bigint

function a() {}
console.log(typeof a)         // function

var date = new Date()
var error = new Error()
console.log(typeof date)      // object(這種被new出來的型態為ojbect)
console.log(typeof error)     // object(這種被ne出來的型態為ojbect)

instanceof 類別類型

判斷A是否為B的實例,如果 A 為 B 的實例則true。如果否則返回false

console.log(12 instanceof Number)  // false
console.log('22' instanceof String)  // false
console.log(true instanceof Boolean) // false
console.log(null instanceof Object) // false
console.log(undefined instanceof Object) // false

console.log([] instanceof Array)   // true
console.log({a: 1} instanceof Object) // true
console.log(json instanceof Object) // true

function a() {}
console.log(a instanceof Function)  // true
console.log(new Date() instanceof Date)  //true

console.log(reg instanceof RegExp) //true
console.log(error instanceof Error) // true

constructor 建構值

console.log('22'.constructor === String)             // true
console.log(true.constructor === Boolean)            // true
console.log([].constructor === Array)                // true
console.log(document.constructor === HTMLDocument)   // true
console.log(window.constructor === Window)           // true
console.log(new Number(22).constructor === Number)   // true
console.log(new Function().constructor === Function) // true
console.log((new Date()).constructor === Date)       // true
console.log(new RegExp().constructor === RegExp)     // true
console.log(new Error().constructor === Error)       // true

全域變數 global

類似瀏覽器 JavaScript 的 window 變數,但是在 Node.js 使用的是 global 變數

// test.js
console.log(global)

<ref *1> Object [global] {
  global: [Circular *1],
  clearInterval: [Function: clearInterval],
  clearTimeout: [Function: clearTimeout],
  setInterval: [Function: setInterval],
  setTimeout: [Function: setTimeout] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]
  },
  queueMicrotask: [Function: queueMicrotask],
  performance: Performance {
    nodeTiming: PerformanceNodeTiming {
      name: 'node',
      entryType: 'node',
      startTime: 0,
      duration: 66.41221900098026,
      nodeStart: 5.158950999379158,
      v8Start: 6.645998999476433,
      bootstrapComplete: 44.11822099983692,
      environment: 27.58743800036609,
      loopStart: -1,
      loopExit: -1,
      idleTime: 0
    },
    timeOrigin: 1648638204321.951
  },
  clearImmediate: [Function: clearImmediate],
  setImmediate: [Function: setImmediate] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]
  }
}

定義全域變數

非必要儘量少用,壁面變數被污染,畢竟全部的程式都可以存取修改全域變數

global.uuid = require('uuid');

console.log(global.uuid);

作業系統 os

const os = require('os');

console.log(os.type());
console.log(os.version());
console.log(os.homedir());

// Darwin
// Darwin Kernel Version 21.1.0: Wed Oct 13 17:33:23 PDT 2021; root:xnu-8019.41.5~1/RELEASE_X86_64
// /Users/kj
變數 說明
os.type() 類型
os.version() 版本
os.homedir() 目錄

路徑 path

const path = require('path');

// /Users/kj/Code/node.js/test.js
console.log(__filename);
// /Users/kj/Code/node.js
console.log(path.dirname(__filename));
// test.js
console.log(path.basename(__filename));
// .js
console.log(path.extname(__filename));
// {
//   root: '/',
//   dir: '/Users/kj/Code/nodejs',
//   base: 'test.js',
//   ext: '.js',
//   name: 'test'
// }
console.log(path.parse(__filename));
console.log(path.join(__dirname, 'files', 'test.json'));
變數 說明
path.dirname() 目錄名稱
path.basename() 檔案名稱
path.extname() 副檔名
path.parse() 解析路徑
path.join() 根據作業系統合併產生檔案路徑,產生不同的 /\ 的路徑

常數

// /Users/kj/Code/nodejs-leetcode
console.log(__dirname);

// /Users/kj/Code/nodejs/test.js
console.log(__filename);
變數 說明
__dirname 檔案放置目錄路徑
__filename 檔案放置路徑,含檔名

系統程序 process

console.log(process);
變數 說明
process.env 環境變數
process.cwd 目前目錄
process.version 目前 Node.js 版本
process.memoryUsage() 記憶體使用狀況
process.exit() 結束程式
process.uptime() 程式執行時間

process.memoryUsage() 記憶體使用狀況

// {
//     rss: 22528000,
//     heapTotal: 4882432,
//     heapUsed: 3964376,
//     external: 224473,
//     arrayBuffers: 11158
// }
// 一開始使用的記憶體
console.log(process.memoryUsage());
// 建立一個很佔空間的變數
var a = new Array(1e7);

// {
//     rss: 103391232,
//     heapTotal: 85159936,
//     heapUsed: 84305032,
//     external: 286011,
//     arrayBuffers: 11158
// }
// 目前使用的記憶體
console.log(process.memoryUsage());
a = null;  // 把 a 變成 null
// {
//     rss: 103403520,
//     heapTotal: 85159936,
//     heapUsed: 84310528,
//     external: 286011,
//     arrayBuffers: 11158
// }
console.log(process.memoryUsage());  // 後來使用的記憶體

call by value 傳值

  • String
  • Number
  • Boolean
  • Null
  • Undefined
  • Symbol

call by reference 傳址

  • Object
  • Array
  • Function

參考資料


定義變數

Node.js 定義變數

Number 數字

Node.js Number 數字

String 字串

Node.js String 字串

Array 陣列

Node.js Array 陣列

Function 函式

Node.js Function 函式

內建函式

Node.js 內建函式

Math 數學運算

Node.js Math 數學運算

Object 物件

Node.js Object 物件

Class 類別

Node.js Class 類別

Closure 閉包

Node.js Closure 閉包

Map

Node.js Map

Set

Node.js Set

this

Node.js this