結論
這裡統整一下目前的內容:
- JavaScript 的基本語法
- JavaScript 中的型別系統
- 早期的物件與現代化的語法
- JavaScript 內部引擎的運作機制
- 非同步程式:Promise與 async/await
- 常用的函式
這裡釐清一個問題, JavaScript Core 到底指的是什麼部份呢?
可以參考 MDN 的 Standard Built-in Object, 基本上就是 JavaScript 的核心, 常用的部分為:
- Infinity、NaN、undefined 等屬性值
- Global Function
- isFinite()
- isNaN()
- parseFloat()
- parseInt()
- encodeURI()
- encodeURIComponent()
- decode()
- decodeURIComponent()
- Global Object
- Number
- BigInt
- Math
- Date
- String
- RegExp
- Indexed Collections
- Array
- Typed-Array (參考 MDN, 就是限制每個元素幾個位元的陣列, 類似C的靜態型別)
- Keyed Collections
- Map、WeakMap
- Set、WeakSet
- 結構化資料
- JSON
- ArrayBuffer、SharedArrayBuffer
- Atomics
- DataView
- 控制抽象物件
- Promise、Generator
- Reflection
- Proxy
- Reflect
- 各種 Error 物件
最核心的部分是 Global Object 以及 Array、JSON、Promise
而 ArrayBuffer 如果處理檔案上傳或是 WebSocket, 也有機會使用到
WebGL 的應用也常常使用到 TypedArray
不屬於 JavaScript Core 的部份
Web API
在 Overview 有提到, JavaScript 可以運行在瀏覽器以外的環境(Node.js), 這情況下, 通常會當作伺服器運行
而由瀏覽器提供的一系列JavaScript函式或物件, 被稱作Web API, 這裡提出幾個常用的:
- Window: 一個包含 DOM 文件的視窗, 可以說是瀏覽器物件模型(BOM), 得以透過 JavaScript 跟瀏覽器進行互動:
- history:與瀏覽紀錄的歷史有關
- location:當前頁面的網址資訊
- screen:目前的視窗資訊
- navigator:瀏覽器本身的資訊, 像是版本號、運行平台等
- Document: 處理 DOM Tree, 包含HTML、XML、SVG 等類型;或是像 Cookie 等資料, 象徵
瀏覽器中載入的網頁資訊
Web API實在是有太多部份, 例如WebSocket、WebRTC(即時影音通訊)、剪貼簿、事件目標、audio/video 處理模組 ... 等
Nodejs
相對於 Web API, 伺服器端的 JavaScript (Node.js) 不需要處理瀏覽器相關的功能, 但是要求直接存取系統上的資源:
- node:crypto:加密/解密模組
- node:http:HTTP協定相關模組(發送請求、開啟伺服器等)
- node:process:有關目前運行的Process(行程)資訊
- node:os:作業系統相關的資訊
- node:fs:檔案系統的操作介面
- node:net:底層TCP、IPC的操作介面
- node :dgram:底層UDP的操作介面
- C++ Addons:與C++ Library 交互的一系列操作模組
如上所列, Nodejs專注在系統相關的操作, 以及如何與 C++ 進行溝通, 反而一些通用格式的解析器(如XML、SVG)或是影音模組並沒有提供
所以 JavaScript 其實可以分成兩部份:
- Standard Object + Web API = 瀏覽器上的JavaScript
- Standard Object + Nodejs API = 伺服器端上的JavaScript
而 Web API、Nodejs API 這些又被稱為宿主環境(Host Environment), 因為他們是由 Runtime Environment 提供者給予的操作介面