瀏覽器上有自己的全局對象 window,同理, nodejs 下也有自己的全局對象 global,并且在各個模塊下 都可以直接訪問 global 對象。
在 nodejs 中,除了可以直接使用 V8 JavaScript 引擎中所支持的原生 JavaScript 的函數(shù)和對象外,它還追加了一些其他的函數(shù)和對象(比如:Buffer 對象、require 函數(shù)等)。
需要注意的是,可以在不引入模塊的情況下直接使用 nodejs 追加的這些函數(shù)和對象。
下面將對上面的這些對象和函數(shù)的使用進行簡單的解釋。
Buffer 對象
在 ES6 之前,原生的 JavaScript 并沒有專門用來處理二進制數(shù)據(jù)的機制,所以為了方便地處理二進制數(shù)據(jù),nodejs 才引入了 Buffer 對象。
ES6 之后,原生的 JavaScript 引入了 TypedArray,用來處理二進制數(shù)據(jù)。注意 TypedArray 并不是以一個單一的對象的形式而存在,而是以一系列值的類型為 TypedArray 的對象而存在。在這一系列對象中,Uint8Array 對象和 Buffer 對象最為相似,但是 Buffer 對象更加適用于 nodejs。
Buffer 對象的實例很像一個各個元素都是整數(shù)的數(shù)組,但是與真正的數(shù)組的區(qū)別在于它的大小固定的(即在實例創(chuàng)建時決定大小),并且為它分配的內(nèi)存是原生的,并且存在于 V8 的堆內(nèi)存外。
在 nodejs 6.0 版本之前,是使用 new Buffer() 語法來創(chuàng)建一個實例,但是因為一些安全問題,以這種形式創(chuàng)建實例的方法被廢除了,取而代之的是一些 Buffer 對象的一些靜態(tài)方法。
創(chuàng)建 Buffer 實例
const buf1 = Buffer.alloc(5);const buf2 = Buffer.allocUnsafe(5);const buf3 = Buffer.from([1, '2a', 230]);const buf4 = Buffer.from('abcdggg');console.log(buf1); // <Buffer 00 00 00 00 00>console.log(buf2); // <Buffer b8 ed a3 80 58> (這只是一種可能的結(jié)果)console.log(buf3); // <Buffer 01 00 e6>console.log(buf4); // <Buffer 61 62 63 64 67 67 67>console.log(buf4.toString()); // abcdgggbuf2.fill(0);console.log(buf2); // <Buffer 00 00 00 00 00>上面講的不太清楚(以后再優(yōu)化),因為我是初學,TypedArray 都沒玩過呢!
但是放心,大腿在這呢 ― Node源碼解析 主站蜘蛛池模板: 宜川县| 谢通门县| 蓬莱市| 乐陵市| 邳州市| 清原| 汝州市| 墨竹工卡县| 海城市| 柳林县| 涿州市| 德令哈市| 明光市| 雅安市| 湖南省| 常州市| 临沂市| 桃园市| 南丰县| 广西| 南昌市| 额敏县| 女性| 奉贤区| 亳州市| 巨野县| 松阳县| 黑龙江省| 大新县| 南平市| 文化| 双流县| 丰城市| 永德县| 永新县| 乌恰县| 金平| 营山县| 广元市| 大冶市| 大冶市|