JavaScript词法:为什么12.toString会报错?

词法

词法规定了语言的最小语义单元:token,可以翻译成“标记”或者“词”。
JavaScript源代码中可以这么分类:
WhiteSpace 空白字符
LineTerminator 换行符
Comment 注释
Token 词

  • IdentifierName 标识符名称,常见的就是变量名,关键字也包含在内
  • Punctuator 符号,运算法和大括号等符号
  • NumericLiteral 数字直接量,就是常见的数字
  • StringLiteral 字符串直接量,就是常见的用单引号或双引号引起来的直接量。
  • Template 字符串模版,用反引号` 括起来的直接量。

JavaScript特别之处:
"/","/=","/123/"

空白符号 Whitespace

<HT>(或称<TAB>)是U+0009,Tab符,\t
<VT>是U+000B,垂直方向Tab符,\v
<FF>是U+000C,Form Feed,分页符,\f
<SP>是U+0020,普通的空格
<NBSP>是U+00A0,非断行空格,是SP的变体;HTML中, 最后生成是它。
<ZWNBSP>(旧称<BOM>)是U+FEFF,ES5新增加入的空白符,是Unicode中的零宽非断行空格。

换行符 LineTerminator

JavaScript中只提供了4种字符作为换行符。
<LF>
<CR>
<LS>
<PS>

<LF>是U+000A,就是最正常换行符,在字符串中的\n。
<CR>是U+000D,回车,在字符串中是\r。
<LS>是U+2028,是Unicode中的行分隔符。
<PS>是U+2029,是Unicode中的段落分隔符。

注释 Comment

JavaScript的注释分为单行注释和多行注释两种:

/* MultiLineCommentChars */
// SingleLineCommentChars

除了四种LineTerminator之外,所有字符都可以作为单行注释。

标识符名称 IdentifierName

IdentifierName可以以美元符“$”、下划线“_”或者Unicode字母开始,除了开始字符以外,IdentifierName中还可以使用Unicode中的连接标记、数字、以及连接符号。

符号 Punctuator

{ ( ) [ ] . ... ; , < > <= >= == != === !== + - * % ** ++ -- << >> >>> & | ^ ! ~ && || ? : = += -= *=

数字直接量 NumericLiteral

字符串直接量 StringLiteral

JavaScript中的StringLiteral支持单引号和双引号两种写法。

" DoubleStringCharacters "
' SingleStringCharacters '

第一种是单字符转义。 即一个反斜杠\后面跟一个字符这种形式。
有特别意义的字符包括有SingleEscapeCharacter所定义的9种,见下表:

除了这9种字符、数字、x和u以及所有的换行符之外,其它字符经过\转义后都是自身。

正则表达式直接量 RegularExpressionLiteral

正则表达式由Body和Flags两部分组成,例如:

/RegularExpressionBody/g

字符串模板 Template

从语法结构上,Template是个整体,其中的 ${ } 是并列关系。
但是实际上,在JavaScript词法中,包含 ${ } 的 Template,是被拆开分析的,如:

`a${b}c${d}e`

在JavaScript中被认为是:

`a${
b
}c${
d
}e`

它被拆分成5个部分:

`a${ 这个被称为模板头
}c${ 被称为模板中段
}e` 被称为模板尾
b 和 d 都是普通标识符
此文章为7月Day10学习笔记,内容来源于极客时间《重学前端》,日拱一卒,每天进步一点点💪💪

豪猪
4 声望4 粉丝

undefined