es5学习笔记
---遇到的坑与不懂并深究
原生对象,内置对象,宿主对象
原生对象: ECMAScript 实现中,并非由宿主环境,而是完全由本规范定义其语义的对象。内置对象:由 ECMAScript 实现提供,独立于宿主环境的对象,ECMAScript 程序开始执行时就存在。宿主对象:由宿主环境提供的对象,用于完善 ECMAScript 执行环境。
标准的原生对象由本规范定义。一些原生对象是内置的,其他的可在 ECMAScript 程序执行过程中构建。例如-->原生对象Array,要NEW
内置对象(不要NEW 直接引用——只有MATH GLOBAL)
宿主对象(BOM DOM & 自定义对象)
(一个很偏的东西)语法和词法的文法
上下文无关文法
- 一个 上下文无关文法 由一定数量的 产生式 (productions) 组成。每个产生式的 左边 (left-hand side) 是一个被称为非终结符 (nonterminal) 的抽象符号, 右边 (right-hand side) 是零或多个非终结符和 终结符 (terminal symbols) 的有序排列。任何文法,它的终结符都来自指定的字母集。
- 当从一个叫做 目标符 (goal symbol) 的特殊非终端符组成的句子起始,那么给出的上下文无关文法就表示 语言 (language),即,将产生式右边序列的非终结符当作左边,进行反复替换的结果就成为可能的终结符序列集合(可能无限)。
词法和正则的文法
词法
- 它定义了一套产生式,从目标符 InputElementDiv 或 InputElementRegExp 起始,描述了如何将这样的字符序列翻译成一个输入元素序列。
- ECMAScript 程序的源文本首先转换成一个输入元素序列;tokens,行终结符,注释,空白构成输入元素序列。从左到右扫描源文本,反复获取作为下一个输入元素的尽可能长的字符序列。
词法文法有两个目标符。InputElementDiv 目标符用在允许除法 (/) 或除赋值 (/=) 运算符开始的语法文法上下文中。InputElementRegExp 目标符用在其他语法文法上下文。
空白和注释之外的输入元素构成 ECMAScript 语法文法的终结符,它们被称为 ECMAScript 的 tokens。这些 tokens 是,ECMAScript 语言的保留字,标识符,字面量,标点符号。此外,行结束符虽然不被视为 tokens,但会成为输入元素流的一部分,用于引导处理自动插入分号( 7.9 )。空白和单行注释会被简单的丢弃,不会出现在语法文法的输入元素的流中。如果一个 多行注释 (MultiLineComment)(即形式为“/ ... /”的注释,不管是否跨越多行)不包含行结束符也会简单地丢弃,但如果一个 多行注释 包含一个或多个结束符,那么,注释会被替换为一个行结束符,成为语法文法输入元素流的一部分。
正则
ECMAScript 的 正则文法 (RegExp grammar)。此文法的终结符字符也由 SourceCharacter 定义。它定义了一套产生式,从目标符 Pattern 起始,描述了如何将这样的字符序列翻译成一个正则表达式模式
两个冒号“::”作为分隔符分割词法和正则的文法产生式。词法和正则的文法共享某些产生式。
数字字符串文法
用于转换字符串为数字值的一种文法。此文法与词法文法的一部分(与数字字面量有关的)类似,并且有终结符 SourceCharacter。
三个冒号“:::”作为分隔符分割数字字符串文法的产生式
语法文法
当一个字符流被解析为 ECMAScript 程序,它首先通过词法文法应用程序反复转换为一个输入元素流;然后再用一个语法文法应用程序解析这个输入元素流。当输入元素流没有更多 tokens 时,如果 tokens 不能解析为 Program 目标非终结符的单一实例,那么程序在语法上存在错误。
只用一个冒号“:”作为分隔符分割语法词法的产生式
JSON 文法
- JSON 文法用于将描述 ECMAScript 对象的字符串转换为实际的对象
- JSON 文法由JSON 词法文法和 JSON 语法文法组成。JSON 词法文法用于将字符序列转换为 tokens,类似 ECMAScript 词法文法。JSON 语法文法说明 JSON 词法文法给出怎样的 tokens 序列才能转换为语法上是正确的 JSON 对象。
- 两个冒号“::”作为分隔符分割 JSON 词法文法的产生式。JSON 词法文法使用某些 ECMAScript 词法文法的产生式。JSON 语法文法与 ECMAScript 语法文法类似。JSON 语法文法产生式被一个冒号“:”作为分隔符分割。