說 JavaScript
首頁
購買書籍
(廣告,請勿封鎖。)

目錄

  1. 讚譽 說 JavaScript
  2. 前言
    1. 您需要了解本書的內容
    2. 閱讀本書的提示
      1. 本書的四個部分
      2. JavaScript 命令列
      3. 符號慣例
        1. 描述語法
        2. 參照方法
        3. 命令列互動
        4. 提示、註解和警告
      4. 快速尋找文件
    3. Safari® Books Online
    4. 如何聯絡我們
    5. 致謝
      1. 準備 JavaScript
      2. JavaScript 說明
      3. 審閱者
  3. I. JavaScript 快速入門
    1. 1. 基本 JavaScript
      1. 背景
        1. JavaScript 與 ECMAScript
        2. 語言的影響和性質
      2. 語法
        1. 語法的概觀
        2. 陳述式與表達式
        3. 分號
        4. 註解
      3. 變數和賦值
        1. 賦值
        2. 複合賦值運算子
        3. 識別碼和變數名稱
        1. 原始值與物件
        2. 原始值
        3. 物件
        4. undefined 和 null
        5. 使用 typeof 和 instanceof 分類值
      4. 布林值
        1. 真值和假值
        2. 二元邏輯運算子
        3. 等值運算子
      5. 數字
      6. 運算子
      7. 字串
        1. 字串運算子
        2. 字串方法
      8. 陳述式
        1. 條件式
        2. 迴圈
      9. 函式
        1. 函式宣告會提升
        2. 特殊變數 arguments
        3. 參數太多或太少
        4. 選用參數
        5. 強制執行元數
        6. 將參數轉換為陣列
      10. 例外處理
      11. 嚴格模式
      12. 變數範圍和閉包
        1. 變數是函式範圍
        2. 變數會提升
        3. 閉包
        4. IIFE 模式:引入新的範圍
      13. 物件和建構函式
        1. 單一物件
        2. 任意屬性鍵
        3. 擷取方法
        4. 方法內部的函式
        5. 建構函式:物件的工廠
      14. 陣列
        1. 陣列文字
        2. 陣列方法
        3. 反覆陣列
      15. 正規表示式
        1. 方法 test():是否有符合項?
        2. 方法 exec():符合項和擷取群組
        3. 方法 replace():搜尋和取代
      16. 數學
      17. 標準函式庫的其他功能
  4. 二、背景
    1. 2. 為什麼是 JavaScript?
      1. JavaScript 是否免費提供?
      2. JavaScript 是否優雅?
      3. JavaScript 是否有用?
        1. 圖形使用者介面
        2. 其他補充 JavaScript 的技術
      4. JavaScript 是否有好的工具?
      5. JavaScript 是否夠快?
      6. JavaScript 是否廣泛使用?
      7. JavaScript 是否有未來?
      8. 結論
    2. 3. JavaScript 的本質
      1. 怪癖和非正統功能
      2. 優雅的部分
      3. 影響
    3. 4. JavaScript 如何建立
    4. 5. 標準化:ECMAScript
    5. 6. JavaScript 歷史里程碑
  5. 三、深入探討 JavaScript
    1. 7. JavaScript 的語法
      1. 語法的概觀
      2. 註解
      3. 表達式與陳述式
        1. 表達式
        2. 陳述式
      4. 控制流程陳述式和區塊
      5. 使用分號的規則
        1. 陳述式以區塊結尾後不加分號
        2. 空陳述式
        3. 自動插入分號
      6. 合法的識別碼
      7. 呼叫數字文字上的方法
      8. 嚴格模式
        1. 切換到嚴格模式
        2. 嚴格模式:建議使用,但有警告
        3. 變數必須在嚴格模式中宣告
        4. 嚴格模式中的函式
        5. 在嚴格模式中設定和刪除不可變的屬性會失敗並產生例外
        6. 未限定的識別碼無法在嚴格模式中刪除
        7. eval() 在嚴格模式中較為乾淨
        8. 在嚴格模式中禁止的功能
    2. 8. 值
      1. JavaScript 的類型系統
        1. JavaScript 的類型
        2. 靜態與動態
        3. 靜態型別與動態型別
        4. 靜態類型檢查與動態類型檢查
        5. 強制轉換
      2. 原始值與物件
      3. 原始值
      4. 物件
      5. undefined 和 null
        1. undefined 和 null 的發生
        2. 檢查 undefined 或 null
        3. undefined 和 null 的歷史
        4. 變更 undefined
      6. 基本資料類型的包裝物件
        1. 包裝物件與基本資料類型不同
        2. 包裝和解開包裝基本資料類型
        3. 基本資料類型從包裝物件中借用其方法
      7. 類型強制轉換
        1. 類型強制轉換可能會隱藏錯誤
        2. 轉換為布林值、數字、字串和物件的函式
        3. 演算法:ToPrimitive()—將值轉換為基本資料類型
    3. 9. 運算子
      1. 運算子和物件
      2. 賦值運算子
        1. 複合賦值運算子
      3. 相等運算子:=== 與 ==
        1. 嚴格相等(===、!==)
        2. 一般(寬鬆)相等(==、!=)
        3. == 沒有有效的用例
      4. 排序運算子
        1. 演算法
      5. 加號運算子 (+)
        1. 演算法
      6. 布林值和數字的運算子
      7. 特殊運算子
        1. 條件運算子 ( ? : )
        2. 逗號運算子
        3. void 運算子
      8. 透過 typeof 和 instanceof 分類值
        1. typeof:分類基本型別
        2. instanceof:檢查物件是否為指定建構函式的執行個體
      9. 物件運算子
    4. 10. 布林值
      1. 轉換為布林值
        1. 手動轉換為布林值
        2. 真值和假值
      2. 邏輯運算子
        1. 二元邏輯運算子:And (&&) 和 Or (||)
        2. 邏輯 And (&&)
        3. 邏輯 Or (||)
        4. 邏輯 Not (!)
      3. 相等運算子、排序運算子
      4. 布林值函式
    5. 11. 數字
      1. 數字文字
        1. 指數
        2. 呼叫文字上的方法
      2. 轉換為數字
        1. 手動轉換為數字
        2. parseFloat()
      3. 特殊數字值
        1. NaN
        2. Infinity
        3. 兩個零
      4. 數字的內部表示法
        1. 特殊指數
      5. 處理捨入誤差
      6. JavaScript 中的整數
        1. 整數範圍
        2. 將整數表示為浮點數
        3. 安全整數
      7. 轉換為整數
        1. 透過 Math.floor()、Math.ceil() 和 Math.round() 進行整數轉換
        2. 透過自訂函式 ToInteger() 進行整數轉換
        3. 透過位元運算子進行 32 位元整數轉換
        4. 透過 parseInt() 進行整數轉換
      8. 算術運算子
      9. 位元運算子
        1. 背景知識
        2. 位元 Not 運算子
        3. 二元位元運算子
        4. 位元位移運算子
      10. 數字函式
      11. 數字建構函式屬性
      12. 數字原型方法
        1. Number.prototype.toFixed(fractionDigits?)
        2. Number.prototype.toPrecision(precision?)
        3. Number.prototype.toString(radix?)
        4. Number.prototype.toExponential(fractionDigits?)
      13. 數字函式
      14. 本章節來源
    6. 12. 字串
      1. 字串文字
      2. 字串文字中的跳脫字元
      3. 字元存取
      4. 轉換為字串
        1. 手動轉換為字串
      5. 比較字串
      6. 串接字串
        1. 串接:加號 (+) 運算子
        2. 串接:合併字串片段陣列
      7. 字串函式
      8. 字串建構函式方法
      9. 字串執行個體屬性 length
      10. 字串原型方法
        1. 擷取子字串
        2. 轉換
        3. 搜尋和比較
        4. 使用正規表示式進行測試、比對和替換
    7. 13. 陳述式
      1. 宣告和指定變數
      2. 迴圈和條件式的主體
      3. 迴圈
        1. 與迴圈一起使用的機制
        2. while
        3. do-while
        4. for
        5. for-in
        6. for each-in
      4. 條件式
        1. if-then-else
        2. switch
      5. with 陳述式
        1. 語法和語意
        2. with 陳述式已棄用
        3. 棄用的理由
      6. debugger 陳述式
    8. 14. 例外處理
      1. 什麼是例外處理?
      2. JavaScript 中的例外處理
        1. throw
        2. try-catch-finally
        3. 範例
      3. 錯誤建構函式
      4. 堆疊追蹤
      5. 實作您自己的錯誤建構函式
    9. 15. 函式
      1. JavaScript 中函式的三個角色
      2. 術語:「參數」與「引數」
      3. 定義函式
        1. 函式運算式
        2. 函式宣告
        3. 函式建構函式
      4. 提升
      5. 函式的名稱
      6. 哪個比較好:函式宣告或函式運算式?
      7. 更進階控制函式呼叫:call()、apply() 和 bind()
        1. func.apply(thisValue, argArray)
        2. func.bind(thisValue, arg1, ..., argN)
      8. 處理遺失或額外的參數
        1. 所有參數依索引:特殊變數 arguments
        2. 強制執行最小參數個數的強制參數
        3. 選用參數
        4. 模擬傳遞參照參數
        5. 陷阱:意外的選用參數
      9. 命名參數
        1. 命名參數作為描述
        2. 選用命名參數
        3. 在 JavaScript 中模擬命名參數
    10. 16. 變數:範圍、環境和閉包
      1. 宣告變數
      2. 背景:靜態與動態
      3. 背景:變數的範圍
      4. 變數是函式範圍
      5. 變數宣告會提升
      6. 透過 IIFE 介紹新的範圍
        1. IIFE 變異:前置運算子
        2. IIFE 變異:已在運算式內容中
        3. IIFE 變異:帶有參數的 IIFE
        4. IIFE 應用
      7. 全域變數
        1. 最佳實務:避免建立全域變數
        2. 模組系統導致較少的全域變數
      8. 全域物件
        1. 跨平台考量
        2. window 的使用案例
      9. 環境:管理變數
      10. 封閉:函式與其誕生範圍保持連線
        1. 透過環境處理封閉
        2. 陷阱:無意間共用環境
    11. 17. 物件與繼承
      1. 第 1 層:單一物件
        1. 屬性的種類
        2. 物件文字
        3. 點運算子 (. ):透過固定鍵存取屬性
        4. 不尋常的屬性鍵
        5. 方括弧運算子 ([] ):透過運算鍵存取屬性
      2. 將任何值轉換為物件
      3. this 作為函式與方法的隱含參數
        1. 設定 this 時呼叫函式:call()、apply() 和 bind()
        2. apply() 用於建構函式
        3. 陷阱:萃取方法時遺失 this
        4. 陷阱:方法中的函式會遮蔽 this
      4. 第 2 層:物件之間的原型關係
        1. 繼承
        2. 覆寫
        3. 透過原型在物件之間共用資料
        4. 取得與設定原型
        5. 特殊屬性 __proto__
        6. 設定與刪除只會影響自有屬性
      5. 屬性的反覆運算與偵測
        1. 列出自有屬性鍵
        2. 列出所有屬性鍵
        3. 檢查屬性是否存在
        4. 範例
      6. 最佳實務:反覆運算自有屬性
      7. 存取器(取得器與設定器)
        1. 透過物件文字定義存取器
        2. 透過屬性描述符定義存取器
        3. 存取器與繼承
      8. 屬性屬性和屬性描述符
        1. 屬性屬性
        2. 屬性描述符
        3. 透過描述符取得與定義屬性
        4. 複製物件
        5. 屬性:定義與指定
        6. 無法指定繼承的唯讀屬性
        7. 可列舉性:最佳實務
      9. 保護物件
        1. 防止擴充
        2. 密封
        3. 凍結
        4. 陷阱:保護是淺層的
      10. 第 3 層:建構函式—實例工廠
        1. JavaScript 中實作的新運算子
        2. 術語:兩個原型
        3. 實例的建構函式屬性
        4. instanceof 運算子
        5. 實作建構函式的提示
      11. 原型屬性中的資料
        1. 避免使用具有實例屬性初始值的原型屬性
        2. 避免非多態原型屬性
        3. 多態原型屬性
      12. 保持資料私密
        1. 建構函數環境中的私密資料 (Crockford 隱私模式)
        2. 帶有標記金鑰的屬性中的私密資料
        3. 帶有實體化金鑰的屬性中的私密資料
        4. 透過 IIFE 保持全域資料私密
      13. 第 4 層:建構函數之間的繼承
        1. 繼承實例屬性
        2. 繼承原型屬性
        3. 確保 instanceof 運作
        4. 覆寫方法
        5. 進行超呼叫
        6. 避免對超建構函數名稱進行硬編碼
        7. 範例:使用中的建構函數繼承
        8. 範例:內建建構函數的繼承層級
        9. 反模式:原型是超建構函數的實例
      14. 所有物件的方法
        1. 轉換為基本型別
        2. Object.prototype.toLocaleString()
        3. 原型繼承和屬性
      15. 通用方法:從原型借用方法
        1. 透過字面量存取 Object.prototype 和 Array.prototype
        2. 呼叫通用方法的範例
        3. 類陣列物件和通用方法
        4. 所有通用方法的清單
      16. 陷阱:將物件用作映射
        1. 陷阱 1:繼承會影響讀取屬性
        2. 陷阱 2:覆寫會影響呼叫方法
        3. 陷阱 3:特殊屬性 __proto__
        4. dict 模式:沒有原型的物件是更好的映射
        5. 最佳實務
      17. 秘笈:使用物件
    12. 18. 陣列
      1. 概觀
        1. 陣列是映射,不是元組
        2. 陣列也可以有屬性
      2. 建立陣列
        1. Array 建構函數
        2. 多維陣列
      3. 陣列索引
        1. in 運算子與索引
        2. 刪除陣列元素
        3. 陣列索引詳細資料
      4. length
        1. 手動增加陣列長度
        2. 減少陣列長度
        3. 最大長度
      5. 陣列中的孔洞
        1. 建立孔洞
        2. 稀疏陣列與稠密陣列
        3. 哪些運算會忽略孔洞,哪些會考慮孔洞?
        4. 從陣列中移除孔洞
      6. Array 建構函數方法
      7. Array 原型方法
      8. 新增和移除元素 (具破壞性)
      9. 排序和反轉元素 (具破壞性)
        1. 比較數字
        2. 比較字串
        3. 比較物件
      10. 串接、切片、合併 (非破壞性)
      11. 搜尋值 (非破壞性)
      12. 反覆運算 (非破壞性)
        1. 檢查方法
        2. 轉換方法
        3. 簡化方法
      13. 陷阱:類陣列物件
      14. 最佳實務:迭代陣列
    13. 19. 正規表示式
      1. 正規表示式語法
        1. 原子:一般
        2. 原子:字元類別
        3. 原子:群組
        4. 量詞
        5. 斷言
        6. 析取
      2. Unicode 和正規表示式
      3. 建立正規表示式
        1. 字面值與建構函式
        2. 旗標
        3. 正規表示式的實例屬性
        4. 建立正規表示式的範例
      4. RegExp.prototype.test:是否有相符項目?
      5. String.prototype.search:在什麼索引位置有相符項目?
      6. RegExp.prototype.exec:擷取群組
        1. 第一個相符項目(未設定旗標 /g)
        2. 所有相符項目(設定旗標 /g)
      7. String.prototype.match:擷取群組或傳回所有相符子字串
      8. String.prototype.replace:搜尋並取代
        1. 取代項目為字串
        2. 取代項目為函式
      9. 旗標 /g 的問題
      10. 提示和技巧
        1. 引用文字
        2. 陷阱:沒有斷言(例如 ^、$),正規表示式會在任何地方找到相符項目
        3. 相符所有或沒有項目
        4. 手動實作後向觀察
      11. 正規表示式秘笈
    14. 20. 日期
      1. 日期建構函式
      2. 日期建構函式方法
      3. 日期原型方法
        1. 時間單位取得器和設定器
        2. 各種取得器和設定器
        3. 將日期轉換為字串
      4. 日期時間格式
        1. 日期格式(無時間)
        2. 時間格式(無日期)
        3. 日期時間格式
      5. 時間值:自 1970-01-01 以來的毫秒數
        1. 將日期轉換為數字
    15. 21. 數學
      1. 數學屬性
      2. 數字函式
      3. 三角函式
      4. 其他函式
    16. 22. JSON
      1. 背景
        1. 資料格式
        2. 歷史
        3. 語法
      2. JSON.stringify(value, replacer?, space?)
        1. JSON.stringify() 忽略的資料
        2. toJSON() 方法
      3. JSON.parse(text, reviver?)
      4. 透過節點訪客轉換資料
        1. JSON.stringify()
        2. JSON.parse()
    17. 23. 標準全域變數
      1. 建構函式
      2. 錯誤建構函式
      3. 非建構函式函式
        1. 編碼和解碼文字
        2. 分類和剖析數字
      4. 透過 eval() 和 new Function() 動態評估 JavaScript 程式碼
        1. 使用 eval() 評估程式碼
        2. 使用 new Function() 評估程式碼
        3. eval() 與 new Function() 的比較
        4. 最佳實務
        5. 結論
      5. 主控台 API
        1. 主控台 API 在各個引擎中的標準化程度如何?
        2. 簡單記錄
        3. 檢查和計算
        4. 格式化記錄
        5. 剖析和計時
      6. 命名空間和特殊值
    18. 24. Unicode 和 JavaScript
      1. Unicode 歷史
      2. 重要的 Unicode 概念
      3. 碼點
      4. Unicode 編碼
      5. JavaScript 原始碼和 Unicode
        1. 原始碼內部
        2. 原始碼外部
      6. JavaScript 字串和 Unicode
        1. 跳脫序列
        2. 透過跳脫字元來參照星體平面字元
        3. 計算字元
        4. Unicode 正規化
      7. JavaScript 正規表示式和 Unicode
        1. 比對任何碼元和任何碼點
        2. 函式庫
        3. 建議閱讀和章節來源
    19. 25. ECMAScript 5 的新功能
      1. 新功能
      2. 語法變更
      3. 標準函式庫的新功能
        1. 元程式設計
        2. 新方法
        3. JSON
      4. 與舊版瀏覽器搭配使用的秘訣
  6. 第四部分:秘訣、工具和函式庫
    1. 26. 元碼風格指南
      1. 現有的風格指南
      2. 一般秘訣
        1. 程式碼應保持一致
        2. 程式碼應易於理解
      3. 普遍接受的最佳實務
        1. 大括弧樣式
        2. 優先使用字面值而非建構函式
        3. 不要耍小聰明
        4. 可接受的聰明做法
      4. 有爭議的規則
        1. 語法
        2. 變數
        3. 物件導向
        4. 其他
      5. 結論
    2. 27. 用於除錯的語言機制
    3. 28. 建立內建類別的子類別
      1. 術語
      2. 障礙 1:具有內部屬性的執行個體
        1. 障礙 1 的解決方法
        2. 注意事項
      3. 障礙 2:無法以函式呼叫的建構函式
        1. 障礙 2 的解決方法
      4. 另一種解決方案:委派
    4. 29. JSDoc:產生 API 文件
      1. JSDoc 的基礎
        1. 語法
        2. 命名類型
      2. 基本標籤
      3. 記錄函式和方法
      4. 內嵌類型資訊(「內嵌文件註解」)
      5. 文件化變數、參數和實例屬性
      6. 文件化類別
        1. 透過建構函式函數定義類別
        2. 透過物件文字定義類別
        3. 透過具有 @constructs 方法的物件文字定義類別
        4. 子類別化
      7. 其他有用的標籤
    5. 30. 函式庫
      1. Shims 與 Polyfills
      2. 四種語言函式庫
      3. ECMAScript 國際化 API
        1. ECMAScript 國際化 API,第 1 版
        2. 這是什麼類型的標準?
        3. 我什麼時候可以使用它?
        4. 進一步閱讀
      4. JavaScript 資源目錄
    6. 31. 模組系統和套件管理員
      1. 模組系統
      2. 套件管理員
      3. 快速且簡便的模組
    7. 32. 更多工具
    8. 33. 接下來要做的
  7. 索引
  8. 關於作者
  9. 版權頁
  10. 版權所有