JavaScript: The Good Parts

Table of Contents

1

1.1 Meta Notes

1.2 Books

1.2.1 DONE Combo #1

  1. DONE 金字塔原理
  2. TODO Beast Machines: Transformers (cartoon)
  3. DONE 论持久战
  4. DONE 一看就懂的经济常识全图解
  5. DONE 刻意练习
  6. DONE 系统之美
  7. DONE 邓小平时代

1.2.2 INPROGRESS Combo #2

  1. DONE 新经济, 新规则 (Kevin Kelly)
  2. DONE 麦肯锡问题解决方法与技巧
  3. DONE 国产遥感卫星进展与应用

1.2.5 INPROGRESS Effective Java

1.2.6 DONE Don't Make Me Think

1.2.7 DONE Clean Code

1.2.8 INPROGRESS Deep Learning

1.2.9 INPROGRESS Async JavaScript

1.2.10 INPROGRESS ng-book2

1.2.11 INPROGRESS Combo #3: SLAM

2 前言 / Preface

3 第 1 章 精华 / Good Parts

Summary
  • class-free: 直接从其他对象继承属性

3.1 为什么是 JAVASCRIPT?

3.2 分析 JAVASCRIPT

3.3 一个简单的试验场 / A Simple Testing Ground

4 第 2 章 语法 / Grammer

Summary
  • railroad diagram

4.1 空白 / Whitespace

  • NaN 是一个数值并且不等于任何一个数值, 且不等于自己 (这个很合理), 用 isNan(num) 来测试

4.2 标识符 / Names

4.3 数字 / Numbers

4.4 字符串 / Strings

  • 16 位 Unicode, ~"A" = "\u0041"~
  • string.length

4.5 语句 / Statements

  • falsy
    • false/null
    • undefined
    • " " (space)
    • 0
    • NaN

4.6 表达式 / Expressions

  • typeof:
    • number
    • string
    • boolean
    • undefined
    • function
    • object: 包括 array, null

4.7 字面量 / Literals

4.8 函数 / Functions

5 第 3 章 对象 / Objects

Summary
  • 属性值可以是 undefined 之外任何值
  • 原型链

5.1 对象字面量 / Object Literals

5.2 检索 / Retrieval

  • 用短路语句避免对 null 找属性

5.3 更新 / Update

5.4 引用 / Reference

5.5 原型 / Prototype   best

  • Object.prototype
    if (typeof Object.create !== 'function') {
        Object.create = function (o) {
    	var F = function () {};
    	F.prototype = o;
    	return new F();
        }
    }
    
  • 一层一层从 .__proto__ 找, 直到 Object.

5.6 反射 / Reflection

  • typeof flight.constructor ('function')
  • flight.hasOwnProperty(prop)

5.7 枚举 / Enumeration

  • for (prop in flight)

5.8 删除 / Delete

  • delete flight.name (set to undefined), 如果是数组, 形成空洞

5.9 减少全局变量污染 / Global Abatement

  • 通过绑定到属性的方法, 把一堆杂七杂八的变量统领到一个变量下

6 第 4 章 函数 / Functions

Summary
  • 编程: 把需求分解成一组函数与数据结果的技能.

6.1 函数对象 / Function Objects

  • 函数就是对象
  • Function.prototype -> Object.prototype

6.2 函数字面量 / Function Literals

  • 通过函数字面量创建的函数对象包含一个连到外部上下文的连接. Closure.

6.3 调用 / Invocation   best

  • 两个额外参数: this 和 arguments (array-like, 只有 length 属性)
  • 缺失的参数 -> undefined
  • 四种调用模式
    • The Method Invocation Pattern: 方法调用: object 的 (public) method 的调用. this 绑定到了对象.
    • The Function Invocation Pattern: 函数调用: var sum = add(3,4), this 绑定到了全局.
    • The Constructor Invocation Pattern: 构造器调用: new Func(), this 绑定到了 new 出来的对象.
    • The Apply Invocation Pattern: apply 调用: func.apply(context, arguments), this 绑定到了第一个参数.

6.4 参数 / Arguments

  • arguments is 'array-like'

6.5 返回 / Return

  • 函数总是返回, 如果没有返回值, 就返回 undefined
  • new Func(), 如果 Func 返回的不是对象, 则返回 this (一个新对象)

6.6 异常 / Exceptions

6.7 给类型增加方法 / Augmenting Types

  • Function.prototype.<method> = function(…) {…}
    Function.prototype.method = function (name, func) {
        if (!this.prototype[name]) {
    	this.prototype[name] = func;
        }
    }
    
    // typeof Number === 'function'
    Number.method('interger', function () {
        return Math[this < 0 ? 'ceil' : 'floor'](this);
    });
    // (12.34).interger()
    
    String.method('trim', function() {
        return this.replace(/^\s+|\s+$/g, '');
    });
    // " abc ".trim()
    

6.8 递归 / Recursion

6.9 作用域 / Scope

6.10 闭包 / Closure

6.11 回调 / Callbacks

6.12 模块 / Module

  • closure

6.13 级联 / Cascade

  • 就是 chaining

6.14 科里化 / Curry

  • better curry than java 8
    Function.method('curry', function() {
        var slice = Array.prototype.slice,
    	args = slice.apply(arguments),
    	that = this;
        return function() {
    	return that.apply(null, args.concat(slice.apply(arguments)));
        };
    });
    

6.15 记忆 / Memoization

7 第 5 章 继承 / Inheritance

7.1 伪类 / Pseudoclassical

  • 构造器函数, 最好大写字母开头

7.2 对象说明符 / Object Specifiers

7.3 原型 / Prototypal

7.4 函数化 / Functional

  • 给私有对象起一个奇怪的名字, 来防止别人使用它
  • 如果对象的状态都是私有的, 则 tamper-proof (防伪)
  • durable 的对象: 只有函数, 没有状态 (不会被入侵)

7.5 部件 / Parts

8 第 6 章 数组 / Arrays

Summary
  • 不是真正的 array, 只是 array-like (因为内存不连续)

8.1 数组字面量 / Array Literals

  • […]
  • {'0': …, …}

8.2 长度 / Length

  • 很容易形成空洞

8.3 删除 / Delete

  • delete array[index]
  • inplace cut off: array.splice(startPos, nElementToCutOff)

8.4 枚举 / Enumeration

8.5 混淆的地方 / Confusion

  • [].constructor === Array (true)

8.6 方法 / Methods

  • reduce
    Array.method('reduce', function (f, value) {
        for (var i = 0; i < this.length; i++) {
    	value = f(this[i], value);
        }
        return value;
    });
    

8.7 维度 / Dimensions

9 第 7 章 正则表达式 / Regular Expressions

9.1 一个例子 / An Example

  • regex.exec
  • regex.test
  • string.match
  • string.replace
  • string.search
  • string.split
  • 不要尝试写一个大而全的 regex

9.2 结构 / Construction

  • /regex/
  • i, g, m

9.3 元素 / Elements

9.3.1 正则表达式分支 / Regexp Choice

  • (a|b), choose a or b

9.3.2 正则表达式序列 / Regexp Sequence

  • regexp factor, regexp quantifier: x{min,max}

9.3.3 正则表达式因子 / Regexp Factor

  • regexp factor, regexp quantifier: x{min,max}

9.3.4 正则表达式转义 / Regexp Escape

  • \d: digits, \D: non-digits
  • \s : whitespaces, \S : non-whitespaces
  • \b: boundry
  • \1: captured group #1

9.4 正则表达式分组 / Regexp Group

  • capturing
  • noncapturing
  • positive lookahead
  • negative lookahead

10 TODO 第 8 章 方法

  • 这部分查文档

11 第 9 章 代码风格 / Style

12 第 10 章 优美的特性 / Beautiful Features

13 附录 A: 毒瘤 / Awful Parts

  • global variables: 没有 linker, 全局变量
  • scope: 语法上有 block scope, 实际上没有
  • semicolon insertion
  • reserved words
  • unicode
  • typeof: typeof null === object
  • parseInt, 小心进制问题, 尤其在处理时间上
    • 不仅还是个单目运算符, 可以转化字符串成数字
  • Floating point
  • NaN: 是 number, isFinite
  • Phony arrays
  • Falsy values: 0, false, null, undefined, ' '
  • undefined 和 NaN 是全局变量, 可能被修改, lodash 库里为了防止别人修改了这个值, 用 var undefined; 来保证它是 undefined.

    令人惊讶的是所有的没有初始化对象都相等…

    var x
    // undefined
    x
    // undefined
    var y
    // undefined
    x === y
    // true
    var undefined
    // undefined
    x === undefined
    // true
    
  • hasOwnProperty
  • Object

14 附录 B: 鸡肋 / Bad Parts

  • =====
  • eval
  • continue (?? why)
  • switch fall through
  • block-less statements
  • ++, –
  • bitwise operators
  • function statements versus the function function expression
  • typed wrappers: use [], {}, new, void

15 附录 C: JSLint

  • unreachable code
  • not looked for (不检查的内容): inited or not

16 附录 D: 语法图

17 附录 E: JSON

18 索引

  • 译者说为了方便读者对着索引看原文, 索引不翻译… 这个解释太牵强. 我有原书, 那我也有它的索引啊. 明明是自己懒得生成中文的索引. (或者只能手工, 搞不定)

Author: TANG ZhiXiong

Created: 2018-09-05 Wed 10:55

Emacs 25.3.2 (Org mode 8.2.10)

Validate