Finished Chap2
parent
5ea4e5c80e
commit
4942e000b8
|
@ -0,0 +1,83 @@
|
|||
# Chapter 2. Lexical Structure
|
||||
|
||||
Cover:
|
||||
* Case sensitivity, space, and line breaks
|
||||
* Comments
|
||||
* Literals
|
||||
* Identifiers and reserved words
|
||||
* Unicode
|
||||
* Optional semicolons
|
||||
|
||||
## 2.1 The Text of a JS Program
|
||||
|
||||
* JS is **case-sensitive**.
|
||||
* JS ignore space character (`/u0020`)
|
||||
* JS ignore line breaks
|
||||
* JS recognizes tabs, assorted ASCII control chars, and Unicode space characters as whitespaces
|
||||
* JS recognizes newlines, carriage returns, and a carriage return/line feed sequences as line terminators.
|
||||
|
||||
## 2.2 Comments
|
||||
|
||||
2 types of comments supported:
|
||||
* `// comment content` for single-line comment
|
||||
* `/* comment content */` for multi-line comments
|
||||
|
||||
## 2.3 Literals
|
||||
|
||||
A **literal** (文字) is a data value that appears directly in a program. e.g.:
|
||||
* `12`
|
||||
* `1.2`
|
||||
* `'hello'`
|
||||
* `true`
|
||||
|
||||
## 2.4 Identifiers and Reserved Words
|
||||
|
||||
* **Identifiers (标识符)** is a just name to name constants, variables, functions, etc.
|
||||
* JS's identifiers start with
|
||||
* `_` or
|
||||
* `#` or
|
||||
* letter
|
||||
|
||||
### 2.4.1 Reserved Words
|
||||
|
||||
JS reserved some keywords, check [Mozilla reference](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Reserved_keywords_as_of_ECMAScript_2015)
|
||||
|
||||
## 2.5 Unicode
|
||||
|
||||
JS programs (files) are written using Unicode character set, so any Unicode charater can be used in string/comments.
|
||||
|
||||
By convention, only ASCII letters/digits are used in identifiers
|
||||
|
||||
### 2.5.1 Unicode Escape Sequence
|
||||
|
||||
Some computer cannot use full set of Unicode char. For backward compatibility, JS defines **escape sequence** to write Unicode chars using only ASCII char.
|
||||
|
||||
How? begin char with `\u` and followed by four hex digits (before ES6) or `{1 to 6 hex digit}` (since ES6):
|
||||
* `let cafe=1`
|
||||
* `caf\u00e9`
|
||||
* `caf\u{E9}`
|
||||
|
||||
### 2.5.2 Unicode Normalization
|
||||
|
||||
non-ASCII char in Unicode can be encoded into different form (introduced before), which create problem due to conflict. Hence Unicode normalization is required, using some tools or editor
|
||||
|
||||
### 2.6 Optional Semicolons
|
||||
|
||||
* JS use `;` to separate statements:
|
||||
* `a=3 ; b=4`
|
||||
* JS can omit semicolon if two statments are written on separate lines.
|
||||
* You can insist to write `;` for clear separation
|
||||
* JS treats a line break as a semicolon if the next nonspace char cannot be interpreted as a continuation of the current statement.
|
||||
|
||||
Miss treatment of newline:
|
||||
|
||||
```js
|
||||
let y = x + f
|
||||
(a+b).toString()
|
||||
```
|
||||
|
||||
will be treated by JS as
|
||||
|
||||
```js
|
||||
let y = x + f(a+b).toString();
|
||||
```
|
Loading…
Reference in New Issue