精通 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. 第一部分 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. 将 arguments 转换为数组
      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. Math
      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. 二元逻辑运算符:与 (&&) 和或 (||)
        2. 逻辑与 (&&)
        3. 逻辑或 (||)
        4. 逻辑非 (!)
      3. 相等运算符、排序运算符
      4. 函数 Boolean
    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. 按位非运算符
        3. 二元按位运算符
        4. 按位移位运算符
      10. 函数 Number
      11. Number 构造函数属性
      12. Number 原型方法
        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. 函数 String
      8. String 构造函数方法
      9. String 实例属性 length
      10. String 原型方法
        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. 属性的种类
        2. 对象字面量
        3. 点运算符 (.):通过固定键访问属性
        4. 不常见的属性键
        5. 方括号运算符 ([]): 通过计算键访问属性
      2. 将任何值转换为对象
      3. this 作为函数和方法的隐式参数
        1. 在设置 this 时调用函数:call()、apply() 和 bind()
        2. 用于构造函数的 apply()
        3. 陷阱:提取方法时丢失 this
        4. 陷阱:方法内部的函数会遮蔽 this
      4. 第二层:对象之间的原型关系
        1. 继承
        2. 覆盖
        3. 通过原型在对象之间共享数据
        4. 获取和设置原型
        5. 特殊属性 __proto__
        6. 设置和删除仅影响自身属性
      5. 属性的迭代和检测
        1. 列出自身属性键
        2. 列出所有属性键
        3. 检查属性是否存在
        4. 示例
      6. 最佳实践:迭代自身属性
      7. 访问器(getter 和 setter)
        1. 通过对象字面量定义访问器
        2. 通过属性描述符定义访问器
        3. 访问器和继承
      8. 属性特性和属性描述符
        1. 属性特性
        2. 属性描述符
        3. 通过描述符获取和定义属性
        4. 复制对象
        5. 属性:定义与赋值
        6. 不能为继承的只读属性赋值
        7. 可枚举性:最佳实践
      9. 保护对象
        1. 防止扩展
        2. 密封
        3. 冻结
        4. 陷阱:保护是浅层的
      10. 第三层:构造函数—实例的工厂
        1. JavaScript 中实现的 new 运算符
        2. 术语:两种原型
        3. 实例的 constructor 属性
        4. instanceof 运算符
        5. 实现构造函数的技巧
      11. 原型属性中的数据
        1. 避免使用具有实例属性初始值的原型属性
        2. 避免使用非多态原型属性
        3. 多态原型属性
      12. 保持数据私有
        1. 构造函数环境中的私有数据(Crockford 私有模式)
        2. 具有标记键的属性中的私有数据
        3. 具有具体化键的属性中的私有数据
        4. 通过 IIFE 保持全局数据私有
      13. 第四层:构造函数之间的继承
        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. 字典模式:没有原型的对象是更好的映射
        5. 最佳实践
      17. 备忘单:使用对象
    12. 18. 数组
      1. 概述
        1. 数组是映射,而不是元组
        2. 数组也可以有属性
      2. 创建数组
        1. 数组构造函数
        2. 多维数组
      3. 数组索引
        1. in 运算符和索引
        2. 删除数组元素
        3. 数组索引详解
      4. length
        1. 手动增加数组长度
        2. 减少数组长度
        3. 最大长度
      5. 数组中的空洞
        1. 创建空洞
        2. 稀疏数组与密集数组
        3. 哪些操作忽略空洞,哪些操作考虑空洞?
        4. 从数组中移除空洞
      6. 数组构造函数方法
      7. 数组原型方法
      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. Date 构造函数
      2. Date 构造函数方法
      3. Date 原型方法
        1. 时间单位获取器和设置器
        2. 各种获取器和设置器
        3. 将日期转换为字符串
      4. 日期时间格式
        1. 日期格式(无时间)
        2. 时间格式(无日期)
        3. 日期时间格式
      5. 时间值:自 1970 年 1 月 1 日以来的毫秒数
        1. 将日期转换为数字
    15. 21. Math
      1. Math 属性
      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. 推荐阅读和章节来源
    19. 25. ECMAScript 5 新增功能
      1. 新功能
      2. 语法更改
      3. 标准库中的新功能
        1. 元编程
        2. 新方法
        3. JSON
      4. 使用旧版浏览器的技巧
  6. IV. 提示、工具和库
    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. 垫片与 Polyfill
      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. 版权