區別:1、node中this指向global,而瀏覽器中指向window;2、Node用CommonJS標準,而瀏覽器用ES Modules標準;3、瀏覽器中的js可以操作DOM,而node中不會;4、I/O讀寫操作不同;5、模組載入不同。
本教學操作環境:windows7系統、nodejs 12.19.0版,DELL G3電腦。
1、全域環境下this的指向
在node中this指向global而在瀏覽器中this指向window,這就是為什麼underscore一上來就定義了一root;
var root = typeof self == 'object' && self.self === self && self || typeof global == 'object' && global.global === global && global || this;
而且在瀏覽器中的window下封裝了不少的API 比如alert 、document、location、history 等等還有很多。我們就不能在node環境中xxx();或window.xxx();了。因為這些API是瀏覽器層級的封裝,純javascript是沒有的。當然node中也提供了不少node特有的API。
2、模組標準
Node.js 使用 CommonJS 模組系統,而在瀏覽器中我們開始看到正在實作的 ES Modules 標準。
在實作中,這表示你暫時在 Node.js 中使用 require(),在瀏覽器中使用 import。
3、DOM操作
瀏覽器中的js大多數情況下是在直接或間接(一些虛擬DOM的庫和框架)的操作DOM。因為瀏覽器中的程式碼主要是在表現層工作。但是node是一門服務端技術。沒有一個前台頁面,所以我門不會在node中操作DOM。
4、I/O讀寫
與瀏覽器不同,我們需要像其他服務端技術一樣讀寫文件,nodejs提供了比較方便的元件。而瀏覽器(確保相容性的)想在頁面中直接打開一個本地的圖片就麻煩了很多(別和我說這還不簡單,相對路徑。。。。。。試試就知道了要么找個庫要嘛二進位流,要嘛上傳上去有了網路位址在顯示。不然人家為什麼要搞一個js庫呢),而這一切node都用一個元件搞定了。
5、模組載入
javascript有個特點,就是原生沒提供套件引用的API一次把要載入的東西全執行一遍,這裡就要看各位閉包的功力了。所用東西都在一起,沒有分而治之,搞的特別沒有邏輯性和復用性。如果頁面簡單或網站當然我們可以透過一些AMD、CMD的js庫(例如requireJS 和 seaJS)搞定事實上很多大型網站都是這麼幹的。
在nodeJS中提供了CMD的模組載入的API,如果你用過seaJS,那麼應該上手很快。
node也提供了npm 這種包管理工具,能更有效方便的管理我們飲用的庫
當然瀏覽器這邊ES6也有這方面的補充,相信未來會更好。 。 。
更多node相關知識,請造訪:nodejs 教學!
以上是node環境與瀏覽器環境的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!