Node.js®是基於Chrome的V8 JavaScript引擎構建的JavaScript運行時。node
穩定性:2 - 穩定
assert
模塊提供了一組簡單的斷言測試,可用於測試不變量。git
存在strict
和legacy
模式,但建議僅使用strict
模式。github
有關使用的相等比較的更多信息,請參閱MDN關於相等比較和相同性的指南。segmentfault
棄用
穩定性:1 - 實驗
async_hooks
模塊提供了一個API來註冊回調,跟蹤Node.js應用程序內部建立的異步資源的生命週期,它能夠使用如下方式訪問:數組
const async_hooks = require('async_hooks');
異步資源表示具備關聯回調的對象,能夠屢次調用此回調,例如,net.createServer()
中的'connection'
事件,或者只是fs.open()
中的一次。在調用回調以前,也能夠關閉資源,AsyncHook
沒有明確區分這些不一樣的狀況,但會將它們表示爲資源的抽象概念。異步
若是使用Worker
,則每一個線程都有一個獨立的async_hooks
接口,每一個線程將使用一組新的異步ID。socket
穩定性:2 - 穩定
在引入TypedArray以前,JavaScript語言沒有用於讀取或操做二進制數據流的機制,Buffer
類是做爲Node.js API的一部分引入的,用於在TCP流、文件系統操做和其餘上下文中與八位字節流進行交互。async
Buffer
類的實例相似於整數數組,但對應於V8堆外部的固定大小的原始內存分配,Buffer
的大小在建立時創建,沒法更改。ide
Buffer
類在全局做用域內,所以不太可能須要使用require('buffer').Buffer
。函數
// Creates a zero-filled Buffer of length 10. const buf1 = Buffer.alloc(10); // Creates a Buffer of length 10, filled with 0x1. const buf2 = Buffer.alloc(10, 1); // Creates an uninitialized buffer of length 10. // This is faster than calling Buffer.alloc() but the returned // Buffer instance might contain old data that needs to be // overwritten using either fill() or write(). const buf3 = Buffer.allocUnsafe(10); // Creates a Buffer containing [0x1, 0x2, 0x3]. const buf4 = Buffer.from([1, 2, 3]); // Creates a Buffer containing UTF-8 bytes [0x74, 0xc3, 0xa9, 0x73, 0x74]. const buf5 = Buffer.from('tést'); // Creates a Buffer containing Latin-1 bytes [0x74, 0xe9, 0x73, 0x74]. const buf6 = Buffer.from('tést', 'latin1');
棄用
Node.js擴展庫是動態連接的共享對象,用C++ 編寫,能夠使用require()
函數加載到Node.js中,就像它們是普通的Node.js模塊同樣使用,它們主要用於提供Node.js中運行的JavaScript與C/C++庫之間的接口。
目前,實現擴展庫的方法至關複雜,涉及多個組件和API的知識:
v8.h
頭文件(Node.js源代碼樹中的deps/v8/include/v8.h
)中,該文件也可在線獲取。node::ObjectWrap
類。deps/
目錄中,Node.js只故意從新導出libuv、OpenSSL、V8和zlib symbols,而且能夠經過擴展庫在不一樣的範圍內使用,有關其餘信息,請參閱連接到Node.js本身的依賴項。如下全部示例都可供下載,可用做擴展庫的起點。
穩定性:2 - 穩定
N-API(在字母中發音爲N,後跟API)是用於構建原生擴展庫的API,它獨立於底層JavaScript運行時(前V8),並做爲Node.js自己的一部分進行維護,此API將是跨Node.js版本的應用程序二進制接口(ABI)穩定版,它旨在將擴展庫與底層JavaScript引擎中的更改隔離開來,並容許爲一個主要版本編譯的模塊在Node.js的後續主要版本上運行而無需從新編譯,ABI穩定性指南提供了更深刻的解釋。
使用與C++擴展庫一節中概述的相同方法/工具構建/打包擴展庫,惟一的區別是原生代碼使用的API集,不使用V8或Node.js原生抽象API,而是使用N-API中可用的功能。
N-API公開的API一般用於建立和操做JavaScript值,概念和操做一般映射到ECMA262語言規範中指定的想法,API具備如下屬性: