# JavaScript: The Definitive Guide

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

</details>

<details>

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

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

</details>

<details>

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

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

</details>

<details>

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

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