> For the complete documentation index, see [llms.txt](https://lochiwei.gitbook.io/web/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lochiwei.gitbook.io/web/master/ref/javascript-the-definitive-guide.md).

# JavaScript: The Definitive Guide

[resource](/web/appendix/res.md) ⟩ JavaScript: The Definitive Guide

{% hint style="success" %}

* author: David Flanagan
* year: 2020
  {% endhint %}

<details>

<summary>Ch. 1：</summary>

* [ ] 1.3 A Tour of JavaScript

</details>

<details>

<summary>Ch. 2：</summary>

</details>

<details>

<summary>Ch 3：Types, Values, Variables</summary>

* [ ] 3.4 [Boolean](/web/js/val/prim/boolean.md) Values
* [ ] 3.9 [Type Conversions](/web/js/val/type/convert.md)
  * [x] 3.9.1 Conversions and Equality ([==](/web/js/grammar/op/relational/equal/sloppy-equality.md))
  * [x] 3.9.2 [Explicit Conversions](broken://pages/BFXIa7n1b4lt7iJVHwLG)
    * [x] implicit type conversions
    * [x] num.toString() ([num.toHex](/web/js/val/prim/num/number+ext/n.tohex.md))
    * [ ] parseInt(), parseFloat()
  * [ ] 3.9.3 Object to Primitive Conversions
    * [x] object -> bool
    * [x] object -> string
    * [ ] binary + operator
    * [ ] \==, != operators
    * [ ] <, <=, >, >= operators
    * [x] [toString()](/web/js/val/obj/convert/.tostring.md)
    * [x] [valueOf()](/web/js/val/obj/convert/.valueof.md)
    * [x] [object -> primitive algorithms](/web/js/val/obj/convert/obj-to-prim.md)
* [x] 3.10 [Variable Declaration](/web/js/variable/declare.md) & [Assignment](/web/js/variable/declare/initial-value.md)
  * [x] 3.10.1 Declarations with [let](/web/js/variable/declare/let.md) and [const](/web/js/variable/declare/const.md)
  * [x] 3.10.2 Variable Declarations with [var](/web/js/variable/declare/var.md)
  * [x] 3.10.3 [Destructuring Assignment](/web/js/grammar/op/assign/destruct.md)

</details>

<details>

<summary>Ch. 4：Expressions &#x26; Operators</summary>

* [x] 4.1 [Primaray Expressions](/web/js/grammar/statement/expr/primary.md)
* [x] 4.2 Object / Array Initializers ([object literal](/web/js/val/obj/create/obj.md) / [array literal](/web/js/val/builtin/arr/create/arr.md))
* [x] 4.3 [Function Expressions](/web/js/val/func/expr.md)
* [x] 4.4 [Property Access Expressions](/web/js/val/obj/prop/access/property-access-expression.md) ( `a.b` / `a[b]` )
  * [x] Conditional Property Access ([optional chaining ?.](/web/js/val/obj/prop/access/optional-chaining.md))
* [x] 4.5 Invocation Expressions
  * [x] Conditional Invocation ([optional invocation ?.()](/web/js/val/obj/prop/access/optional-invocation-..md))
    * [x] [short-circuiting](/web/js/grammar/op/term/short-circuiting.md)
* [x] 4.6 Object Creation Expressions ([new](/web/js/val/obj/create/new.md))
* [x] 4.7 [Operator](/web/js/grammar/op.md) Overview
  * [x] 4.7. 1 [Number of Operands](/web/js/grammar/op/term/arity.md) (arity)
    * [x] [terms for operators](/web/js/grammar/op/term.md): lval, unary, binary ...
  * [x] 4.7.2 Operand and Result Type
    * [x] [table of operators](/web/js/grammar/op/table-of-operators.md)
    * [x] auto-convert
    * [x] truthy / [falsy](/web/js/val/type/falsy.md)
  * [x] 4.7.3 Operator Side Effects
  * [x] 4.7.4 Operator Precedence
  * [x] 4.7.5 [Operator Associativity](/web/js/grammar/op/term/associativity.md)
  * [x] 4.7.6 Order of Evaluation
* [ ] 4.8 [Arithmetic Expressions](/web/js/grammar/op/arithmetic.md)
  * [x] [non-numeric operand](/web/js/grammar/op/term/non-numeric-operand.md)
  * [x] 4.8.1 The + Operator ([add/concate +](/web/js/grammar/op/arithmetic/binary/+.md))
  * [ ] 4.8.2 [Unary Arithmetic Operators](/web/js/grammar/op/arithmetic/unary.md)
  * [ ] 4.8.3 [Bitwise Operators](/web/js/grammar/op/arithmetic/bitwise.md)
* [x] 4.9 [Relational Expressions](/web/js/grammar/op/relational.md)
  * [x] 4.9.1 [Equality & Inequality Operators](/web/js/grammar/op/relational/equal.md)
  * [x] 4.9.2 [Comparison Operators](/web/js/grammar/op/relational/compare.md)
  * [x] 4.9.3 [\`in\` operator](/web/js/grammar/op/relational/in.md)
  * [x] 4.9.4 \`[instanceof](/web/js/grammar/op/relational/instanceof.md)\` operator
* [ ] 4.10 [Logical Expressions](/web/js/grammar/op/logical.md)
  * [ ] 4.10.1 Logical And (&&)
    * [x] [short-circuiting](/web/js/grammar/op/term/short-circuiting.md)
  * [ ] 4.10.2 Logical OR (||)
  * [ ] 4.10.3 Logical NOT (!)
* [ ] 4.11 [Assignment Expressions](/web/js/grammar/op/assign.md)
  * [ ] 4.11.1 Assignment with Operation
* [ ] 4.12 Evaluation Expressions
  * [ ] 4.12.1 [eval()](/web/js/scope/global/object/eval.md)
  * [ ] 4.12.2 Global eval()
    * [ ] direct eval
  * [ ] 4.12.3 Strict eval()
* [ ] 4.13 Miscellaneous Operators
  * [ ] 4.13.1 [The Conditional Operator (?:)](/web/js/grammar/op/ternary/conditional-operator.md)
  * [ ] 4.13.2 First-Defined (??) ([nullish-coalescing](/web/js/grammar/op/logical/nullish-coalescing.md))
  * [ ] 4.13.3 The [typeof](/web/js/val/type/name/typeof.md) Operator
  * [ ] 4.13.4 The [delete](/web/js/val/obj/prop/create/delete.md) Operator
  * [ ] 4.13.5 The [await](/web/js/async/await.md) Operator
  * [ ] 4.13.6 The [void](/web/js/grammar/op/unary/void.md) Operator
  * [ ] 4.13.7 [The comma Operator (,)](/web/js/grammar/op/binary/comma-operator.md)

</details>

<details>

<summary>Ch. 5：Statements</summary>

* [x] 5.1 Expression Statements ([expression](/web/js/grammar/statement/expr.md))
* [x] 5.2 Compound and Empty Statements ([block](/web/js/grammar/statement/other/block.md), [empty statement](/web/js/grammar/statement/other/empty.md))
* [ ] 5.3 Conditionals ([branch](/web/js/grammar/statement/flow/branch.md))
  * [x] 5.3.1 [if](/web/js/grammar/statement/flow/branch/if.md)
  * [ ] 5.3.2 else if
  * [x] 5.3.3 [switch](/web/js/grammar/statement/flow/branch/switch.md)
* [x] 5.4 [Loops](/web/js/grammar/statement/loop.md)
  * [x] 5.4.1 [while](/web/js/grammar/statement/loop/while.md)
  * [x] 5.4.2 [do/while](/web/js/grammar/statement/loop/do...while.md)
  * [x] 5.4.3 [for](/web/js/grammar/statement/loop/for/for.md)
  * [x] 5.4.4 [for/of](/web/js/grammar/statement/loop/for/of.md)
  * [x] 5.4.5 [for/in](/web/js/grammar/statement/loop/for/in.md)
* [x] 5.5 [Jumps](/web/js/grammar/statement/flow/jump.md)
  * [x] 5.5.1 [Labeled](/web/js/grammar/statement/other/label.md) Statements
  * [x] 5.5.2 [break](/web/js/grammar/statement/flow/jump/break.md)
  * [x] 5.5.3 [continue](/web/js/grammar/statement/flow/jump/continue.md)
  * [x] 5.5.4 [return](/web/js/grammar/statement/flow/jump/return.md)
  * [x] 5.5.5 [yield](/web/js/iteration/generator/func/yield.md)
  * [x] 5.5.6 [throw](/web/js/debug/handling/throw.md)
  * [x] 5.5.7 [try/catch/finally](/web/js/debug/handling/try-catch-finally.md)
* [x] 5.6 Miscellaneous Statements
  * [x] 5.6.1 [with](/web/js/grammar/statement/other/with.md)
  * [x] 5.6.2 [debugger](/web/js/debug/devtools/debugger.md)
  * [x] 5.6.3 [“use strict”](/web/js/grammar/directive/use-strict.md)
* [x] 5.7 [Declarations](/web/js/grammar/declare.md)
  * [x] 5.7.1 [const](/web/js/variable/declare/const.md), [let](/web/js/variable/declare/let.md), and [var](/web/js/variable/declare/var.md)
  * [x] 5.7.2 [function](/web/js/val/func.md)
  * [x] 5.7.3 [class](/web/js/val/class.md)
  * [x] 5.7.4 [import](/web/js/module/es/import.md) and [export](/web/js/module/es/export.md)

</details>

<details>

<summary>Ch. 6：Objects</summary>

* [x] 6.1 Introduction to Objects
  * [x] [property name](/web/js/val/obj/prop/name.md)
  * [x] [prototype](/web/js/val/obj/proto.md)
  * [x] property attriibutes ([attribute](/web/js/val/obj/prop/attr.md))
* [x] 6.2 [Creating Objects](/web/js/val/obj/create.md)
  * [x] 6.2.1 [Object Literals](/web/js/val/obj/create/obj.md)
    * [x] [trailing comma](/web/js/grammar/token/literal/trailing-comma.md)
  * [x] 6.2.2 Creating Objects with [new](/web/js/val/obj/create/new.md)
  * [x] 6.2.3 [Prototypes](/web/js/val/obj/proto.md)
    * [x] [prototype chain](/web/js/val/obj/proto/chain.md)
  * [x] 6.2.4 [Object.create()](/web/js/val/obj/create/object.create.md)
* [x] 6.3 Querying & Setting Properties
  * [x] 6.3.1 Objects As [Associative Arrays](/web/js/concept/associated-array.md)
  * [x] 6.3.2 [Inheritance](/web/js/val/obj/extend/inheritance.md)
  * [x] 6.3.3 [Property Access](/web/js/val/obj/prop/access.md) Errors
* [x] 6.4 [Deleting](/web/js/val/obj/prop/create/delete.md) Properties
* [x] 6.5 [Testing Properties](/web/js/val/obj/prop/test.md)
* [x] 6.6 [Enumerating Properties](/web/js/val/obj/prop/enumerate.md)
* [x] 6.7 [Extending Objects](/web/js/val/obj/extend.md)
  * [x] [Object.assign()](/web/js/val/obj/extend/object.assign.md)
* [x] 6.8 [Serializing Objects](/web/js/val/obj/convert/serializing-objects.md)
* [x] 6.9 Object Methods ([converting objects](/web/js/val/obj/convert.md))
* [x] 6.10 Extended [Object Literal](/web/js/val/obj/create/obj.md) Syntax

</details>

<details>

<summary>Ch. 7：Arrays</summary>

* [ ] 7.1 Creating Arrays

</details>

<details>

<summary>Ch. 8：Functions</summary>

* [ ] 8.3.5 Destructuring Function Arguments into Parameters

</details>

<details>

<summary>Ch. 14：Metaprogramming</summary>

* [ ] 14.4.7 (define your own object -> primitive conversion)

</details>

{% tabs %}
{% tab title="🗺️ 圖表" %}
{% embed url="<https://kbimages1-a.akamaihd.net/c44a0ade-c733-43a1-817a-958059bc0b60/1200/1200/False/javascript-the-definitive-guide-2.jpg>" %}
JavaScript: The Definitive Guide (7th ed.)
{% endembed %}
{% endtab %}
{% endtabs %}
