JavaScript语言精髓与编程实践_第1页
JavaScript语言精髓与编程实践_第2页
JavaScript语言精髓与编程实践_第3页
JavaScript语言精髓与编程实践_第4页
JavaScript语言精髓与编程实践_第5页
已阅读5页,还剩644页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaScript语言精髓与编程实践(第3版)注:原文档电子版(非扫描),需要的请下载本文档后留言谢谢。目录\h第1章二十年来的JavaScript\h1.1网页中的代码\h1.1.1新鲜的玩意儿\h1.1.2写在网页中的第一段代码\h1.1.3最初的价值\h1.2用JavaScript来写浏览器上的应用\h1.2.1我要做一个聊天室\h1.2.2Flash的一席之地\h1.2.3RWC与RIA之争\h1.3没有框架与库的语言能怎样发展呢\h1.3.1做一个框架\h1.3.2重写框架的语言层\h1.3.3富浏览器端开发(RWC)与AJAX\h1.4语言的进化\h1.4.1Qomo的重生\h1.4.2QoBean是对语言的重新组织\h1.4.3JavaScript作为一门语言的进化\h1.5大型系统开发\h1.5.1框架与架构是不同的\h1.5.2大型系统与分布式的环境\h1.5.3划时代的ES6\h1.6为JavaScript正名\h1.6.1JavaScript\h1.6.1.1CoreJavaScript\h1.6.1.2SpiderMonkeyJavaScript\h1.6.1.3JScript\h1.6.2ECMAScript\h1.7JavaScript的应用环境\h1.7.1宿主环境\h1.7.2外壳程序\h1.7.3运行期环境\h1.7.4兼容环境下的测试\h第2章JavaScript的语法\h2.1语法综述\h2.1.1标识符所绑定的语义\h2.1.2识别语法错误与运行错误\h2.2JavaScript的语法:声明\h2.2.1变量的数据类型\h2.2.1.1基本数据类型\h2.2.1.2宿主定义的其他对象类型\h2.2.1.3值类型与引用类型\h2.2.1.4讨论:ECMAScript的类型系统\h2.2.2变量声明\h2.2.2.1块级作用域的变量声明与一般var声明\h2.2.2.2用赋值模板声明一批变量\h2.2.3使用字面量风格的值\h2.2.3.1字符串字面量、转义符\h2.2.3.2模板字面量\h2.2.3.3数值字面量\h2.2.4其他声明\h2.2.4.1常量声明\h2.2.4.2符号声明\h2.2.4.3函数声明\h2.3JavaScript的语法:表达式运算\h2.3.1一般表达式运算\h2.3.1.1逻辑运算\h2.3.1.2字符串运算\h2.3.1.3数值运算\h2.3.2比较运算\h2.3.2.1等值检测\h2.3.2.2序列检测\h2.3.3赋值运算\h2.3.3.1赋值的语义\h2.3.3.2复合赋值运算符\h2.3.3.3解构赋值\h2.3.4函数相关的表达式\h2.3.4.1匿名函数与箭头函数\h2.3.4.2函数调用\h2.3.4.3new运算\h2.3.5特殊作用的运算符\h2.3.5.1类型运算符(typeof)\h2.3.5.2展开语法(spreadsyntax)\h2.3.5.3面向表达式的运算符\h2.3.6运算优先级\h2.4JavaScript的语法:语句\h2.4.1表达式语句\h2.4.1.1一般表达式语句\h2.4.1.2赋值语句与隐式的变量声明\h2.4.1.3函数调用语句\h2.4.2变量声明语句\h2.4.3分支语句\h2.4.3.1条件分支语句(if语句)\h2.4.3.2多重分支语句(switch语句)\h2.4.4循环语句\h2.4.5流程控制:一般子句\h2.4.5.1标签声明\h2.4.5.2break子句\h2.4.5.3continue子句\h2.4.5.4return子句\h2.4.6流程控制:异常\h2.5JavaScript的语法:模块\h2.5.1模块的声明与加载\h2.5.1.1加载模块\h2.5.1.2声明模块\h2.5.2名字空间的特殊性\h2.5.2.1名字空间的创建者\h2.5.2.2名字空间中的名字是属性名\h2.5.2.3使用上的一些特殊性\h2.6严格模式下的语法限制\h2.6.1语法限制\h2.6.2执行限制\h2.6.3严格模式的范围\h2.6.3.1有限范围下的严格模式\h2.6.3.2非严格模式的全局环境\h2.7运算符的二义性\h2.7.1加号“+”的二义性\h2.7.2括号“()”的二义性\h2.7.3冒号“:”与标签的二义性\h2.7.4大括号“{}”的二义性\h2.7.4.1复合语句/语句块\h2.7.4.2声明对象字面量\h2.7.4.3函数声明\h2.7.4.4结构化异常\h2.7.4.5模板中的变量引用\h2.7.4.6解构赋值\h2.7.5逗号“,”的二义性\h2.7.6方括号“[]”的二义性\h2.7.7语法设计中对二义性的处理\h第3章JavaScript的面向对象语言特性\h3.1面向对象编程的语法概要\h3.1.1对象声明与实例创建\h3.1.1.1使用构造器创建对象实例\h3.1.1.2声明对象字面量\h3.1.1.3数组及其字面量\h3.1.1.4正则表达式及其字面量\h3.1.1.5在对象声明中使用属性存取器\h3.1.2使用类继承体系\h3.1.2.1声明类和继承关系\h3.1.2.2声明属性\h3.1.2.3调用父类构造方法\h3.1.2.4调用父类方法\h3.1.2.5类成员(类静态成员)\h3.1.3对象成员\h3.1.3.1成员的列举,以及可列举性\h3.1.3.2对象及其成员的检查\h3.1.3.3值的存取\h3.1.3.4成员的删除\h3.1.3.5方法的调用\h3.1.4使用对象自身\h3.1.4.1与基础类型数据之间的运算\h3.1.4.2默认对象的指定\h3.1.5符号\h3.1.5.1列举符号属性\h3.1.5.2改变对象内部行为\h3.1.5.3全局符号表\h3.2JavaScript的原型继承\h3.2.1空(null)与空白对象(empty)\h3.2.1.1空白对象是所有对象的基础\h3.2.1.2构造复制?写时复制?还是读遍历?\h3.2.1.3构造过程:从函数到构造器\h3.2.1.4内置属性与方法\h3.2.1.5原型为null:“更加空白”的对象\h3.2.2原型链的维护\h3.2.2.1外部原型链与constructor属性\h3.2.2.2使用内部原型链\h3.2.3原型继承的实质\h3.2.3.1简单模型\h3.2.3.2基于原型继承的设计方法\h3.2.3.3如何理解“继承来的成员”\h3.3JavaScript的类继承\h3.3.1类是静态的声明\h3.3.2super是全新的语法元素\h3.3.2.1super的作用\h3.3.2.2super指向什么\h3.3.2.3super对一般属性的意义\h3.3.2.4super在两种继承关系中的矛盾\h3.3.2.5super的动态计算过程\h3.3.3类是用构造器(函数)来实现的\h3.3.4父类的默认值与null值\h3.4JavaScript的对象系统\h3.4.1封装与多态\h3.4.1.1封装\h3.4.1.2多态\h3.4.1.3多态与方法继承\h3.4.2属性\h3.4.2.1方法\h3.4.2.2事件\h3.4.3构造对象系统的方法\h3.4.3.1类抄写\h3.4.3.2原型继承\h3.4.3.3类继承\h3.4.3.4直接创建对象\h3.4.3.5如何选择继承的方式\h3.4.4内置的对象系统\h3.4.4.1早期规范(ES5之前)中的对象\h3.4.4.2集合对象\h3.4.4.3结构化数据对象\h3.4.4.4反射对象\h3.4.4.5其他\h3.4.5特殊效果的继承\h3.5可定制的对象属性\h3.5.1属性描述符\h3.5.1.1数据描述符\h3.5.1.2存取描述符\h3.5.1.3隐式创建的描述符:字面量风格的对象或类声明\h3.5.2定制对象属性\h3.5.2.1给属性赋值\h3.5.2.2使用属性描述符\h3.5.2.3取属性或属性列表\h3.5.3属性表的状态\h3.6运行期侵入与元编程系统\h3.6.1关于运行期侵入\h3.6.1.1运行期侵入的核心机制\h3.6.1.2可被符号影响的行为\h3.6.1.3内部方法与反射机制\h3.6.1.4侵入原型\h3.6.2类类型与元类继承\h3.6.2.1原子\h3.6.2.2元与元类\h3.6.2.3类类型系统\h3.6.2.4类类型的检查\h3.6.2.5类类型的声明以及扩展特性\h3.6.3元编程模型\h第4章JavaScript语言的结构化\h4.1概述\h4.1.1命令式语言\h4.1.1.1存储与数据结构\h4.1.1.2结构化编程\h4.1.1.3结构化的疑难\h4.1.2面向对象语言\h4.1.2.1结构化的延伸\h4.1.2.2更高层次的抽象:接口\h4.1.2.3面向接口的编程方法\h4.1.3再论语言的分类\h4.1.3.1对语言范型的简化\h4.1.3.2结构化的性质\h4.1.4JavaScript的语源\h4.2基本的组织元素\h4.2.1标识符\h4.2.2表达式\h4.2.2.1字面量\h4.2.2.2初始器\h4.2.3语句\h4.2.4模块\h4.2.5组织的原则\h4.2.5.1原则一:抑制数据的可变性\h4.2.5.2原则二:最小逻辑和最大复用\h4.2.5.3原则三:语法在形式上的清晰与语义一致性\h4.3声明\h4.3.1声明名字\h4.3.2确定性\h4.3.3顶层声明\h4.4语句与代码分块\h4.4.1块\h4.4.1.1简单语句\h4.4.1.2单值表达式\h4.4.2块与语句的语法结构\h4.4.2.1语义上的代码分块\h4.4.2.2分支逻辑中的代码分块\h4.4.2.3多重分支逻辑中的代码分块\h4.4.2.4循环逻辑中的代码分块\h4.4.2.5异常中的代码分块\h4.4.3块与声明语句\h4.4.3.1只能在块中进行数据声明\h4.4.3.2能同时声明块的声明语句\h4.4.3.3声明语句与块的组织\h4.4.4块与语句的值\h4.4.4.1语句的执行状态\h4.4.4.2语句无值\h4.4.4.3语句有值\h4.4.5标签化语句与块\h4.5组织形式分块的方法\h4.5.1词法作用域\h4.5.1.1不存在“级别1:表达式”\h4.5.1.2级别2:语句\h4.5.1.3级别3:函数\h4.5.1.4级别4:模块\h4.5.1.5级别5:全局\h4.5.2执行流程及其变更\h4.5.2.1级别1:可能的逃逸\h4.5.2.2级别2:“break<label>;”等语法\h4.5.2.3级别3:return子句\h4.5.2.4级别4:动态模块与Promise中的流程控制\h4.5.2.5级别5:throw语句\h4.5.3词法作用域之间的相关性\h4.5.4执行流程变更的内涵\h4.6层次结构程序设计\h4.6.1属性的可见性\h4.6.1.1属性在继承层次间的可见性\h4.6.1.2属性在继承树(子树)间的可见性\h4.6.2多态的逻辑\h4.6.2.1super是对多态逻辑的绑定\h4.6.2.2super是一个作用域相关的绑定\h4.6.3私有作用域的提出\h4.7历史遗产:变量作用域\h4.7.1变量作用域\h4.7.1.1级别3:函数(局部变量)\h4.7.1.2级别4:模块\h4.7.1.3级别5:全局变量\h4.7.2变量的特殊性与变量作用域的关系\h4.7.2.1变量提升\h4.7.2.2变量动态声明\h4.7.2.3变量隐式声明(全局属性)\h4.8私有属性与私有字段的纷争\h4.8.1私有属性的提出\h4.8.1.1对象字面量中的作用域问题\h4.8.1.2类声明中的作用域问题\h4.8.1.3识别“对象自己(访问)”\h4.8.1.4识别“对象访问(自己)”\h4.8.2从私有属性到私有成员\h4.8.2.1私有属性与私有字段\h4.8.2.2私有字段与私有变量\h4.8.2.3再论私有成员\h4.8.3“类字段”提案的实现概要\h4.8.3.1语法设计\h4.8.3.2实现框架\h4.8.3.3概要分析\h4.8.4“私有属性”提案的设计与提议\h4.8.4.1语法设计\h4.8.4.2语法与语义的关系\h4.8.5“私有属性”提案的实现\h4.8.5.1核心的实现逻辑\h4.8.5.2一个简短的回顾\h4.8.5.3保护属性的实现\h4.8.5.4可见性的管理(unscopables)\h4.8.5.5避免侵入(thisValue)\h4.8.5.6内部访问(internal)\h4.8.5.7概要分析\h第5章JavaScript的函数式语言特性\h5.1概述\h5.1.1从代码风格说起\h5.1.2为什么常见的语言不赞同连续求值\h5.1.3函数式语言的渊源\h5.2从运算式语言到函数式语言\h5.2.1JavaScript中的几种连续运算\h5.2.1.1连续赋值\h5.2.1.2三元表达式的连用\h5.2.1.3连续逻辑运算\h5.2.1.4逗号运算符与连续运算\h5.2.1.5解构赋值\h5.2.1.6函数与方法的调用\h5.2.2如何消灭语句\h5.2.2.1通过表达式消灭分支语句\h5.2.2.2通过函数递归消灭循环语句\h5.2.2.3其他可以被消灭的语句\h5.2.3运算式语言\h5.2.3.1运算的实质是值运算\h5.2.3.2运算式语言的应用\h5.2.4重新认识函数\h5.2.4.1函数是对运算式语言的补充\h5.2.4.2函数是代码的组织形式\h5.2.4.3当运算符等义于某个函数时\h5.2.5函数式语言\h5.2.5.1“函数”===“Lambda”\h5.2.5.2函数是操作数\h5.2.5.3在函数内保存数据\h5.2.5.4函数内的运算对函数外无副作用\h5.2.5.5函数式的特性集\h5.3JavaScript中的函数\h5.3.1参数\h5.3.1.1可变参数\h5.3.1.2默认参数\h5.3.1.3剩余参数\h5.3.1.4模板参数\h5.3.1.5参数对象\h5.3.1.6非简单参数\h5.3.1.7非惰性求值\h5.3.1.8传值参数\h5.3.2函数\h5.3.2.1一般函数\h5.3.2.2生成器函数\h5.3.2.3类\h5.3.2.4方法\h5.3.2.5箭头函数\h5.3.2.6绑定函数\h5.3.2.7代理函数\h5.3.3函数的数据性质\h5.3.3.1函数是第一型\h5.3.3.2数据态的函数\h5.3.3.3类与对象态的函数\h5.3.3.4代理态的函数\h5.3.4函数与逻辑结构\h5.3.4.1递归\h5.3.4.2函数作为构造器的递归\h5.3.4.3块级作用域中的函数\h5.4函数的行为\h5.4.1构造\h5.4.1.1this引用的创建\h5.4.1.2初始化this对象\h5.4.2调用\h5.4.2.1不使用函数调用运算符\h5.4.2.2callee:我是谁\h5.4.2.3caller:谁调用我\h5.4.3方法调用\h5.4.3.1属性存取与this引用的传入\h5.4.3.2this引用的使用\h5.4.3.3在方法调用中理解super\h5.4.3.4动态地添加方法\h5.4.4迭代\h5.4.4.1可迭代对象与迭代\h5.4.4.2可迭代对象在语法层面的支持\h5.4.4.3迭代器的错误与异常处理\h5.4.5生成器中的迭代\h5.4.5.1生成器对象\h5.4.5.2生成器的错误与异常处理\h5.4.5.3方法throw()的隐式调用\h5.4.5.4向生成器中传入的数据\h5.5闭包\h5.5.1闭包与函数实例\h5.5.1.1闭包与非闭包\h5.5.1.2什么是函数实例\h5.5.1.3看到闭包\h5.5.1.4闭包的数量\h5.5.2闭包的使用\h5.5.2.1运行期的闭包\h5.5.2.2闭包中的可访问标识符\h5.5.2.3用户代码导致的闭包变化\h5.5.2.4函数表达式的特殊性\h5.5.2.5严格模式下的闭包\h5.5.3与闭包类似的实例化环境\h5.5.3.1全局环境\h5.5.3.2模块环境\h5.5.3.3对象闭包\h5.5.3.4块\h5.5.3.5循环语句的特殊性\h5.5.3.6函数闭包与对象闭包的混用\h5.5.4与闭包相关的一些特性\h5.5.4.1变量维护规则\h5.5.4.2引用与泄露\h5.5.4.3语句或语句块中的闭包问题\h5.5.4.4闭包中的标识符(变量)特例\h5.5.4.5函数对象的闭包及其效果\h第6章JavaScript的动态语言特性\h6.1概述\h6.1.1动态数据类型的起源\h6.1.2动态执行系统\h6.1.3脚本系统的起源\h6.1.4脚本只是表现形式\h6.2动态类型:对象与值类型之间的转换\h6.2.1包装类:面向对象的妥协\h6.2.1.1显式创建\h6.2.1.2显式包装\h6.2.1.3隐式包装的过程与检测方法\h6.2.1.4包装值类型数据的必要性与问题\h6.2.1.5其他字面量与相应的构造器\h6.2.1.6函数特例\h6.2.2从对象到值\h6.2.2.1对象到值的隐式转换规则\h6.2.2.2直接的值运算不受包装类的方法影响\h6.2.2.3什么是“转换的预期”\h6.2.2.4深入探究valueOf()方法\h6.2.2.5布尔运算的特例\h6.2.2.6符号Symbol.toPrimitive的效果\h6.2.3显式的转换\h6.2.3.1显式转换的语法含义\h6.2.3.2对“转换预期”的显式表示\h6.2.3.3关于符号值的补充说明\h6.3动态类型:值类型的转换\h6.3.1值运算:类型转换的基础\h6.3.1.1完整过程:运算导致的类型转换\h6.3.1.2语句或语义导致的类型转换\h6.3.2值类型之间的转换\h6.3.2.1undefined的转换\h6.3.2.2number的转换\h6.3.2.3boolean的转换\h6.3.2.4string的转换\h6.3.2.5symbol的转换\h6.3.3值类型之间的显式转换\h6.3.3.1到数值的显式转换\h6.3.3.2到字符串类型的显式转换\h6.3.3.3到undefined值的显式处理\h6.3.3.4到布尔值的显式处理\h6.4动态类型:对象与数组的动态特性\h6.4.1关联数组与索引数组\h6.4.2索引数组作为对象的问题\h6.4.2.1索引数组更加低效\h6.4.2.2属性length的可写性\h6.4.2.3类型化数组的一些性质\h6.4.3类数组对象:对象作为索引数组的应用\h6.4.4其他\h6.5重写\h6.5.1标识符的重写及其限制\h6.5.1.1早于用户代码之前的声明与重写\h6.5.1.2声明对标识符可写性的影响\h6.5.1.3赋值操作带来的重写\h6.5.1.4对象内部方法对重写的影响\h6.5.1.5非赋值操作带来的重写\h6.5.1.6条件化声明中的重写\h6.5.1.7运算优先级与引用的暂存\h6.5.2原型重写\h6.5.3构造器重写\h6.5.3.1重写Object()\h6.5.3.2使用类声明来重写\h6.5.3.3继承关系的丢失\h6.5.4对象成员的重写\h6.5.4.1成员重写的检测\h6.5.4.2成员重写的删除\h6.5.4.3成员重写对作用域的影响\h6.5.5引擎对重写的限制\h6.5.5.1this与super等关键字的重写\h6.5.5.2语句中的重写\h6.5.5.3结构化异常处理中的重写\h6.6动态执行\h6.6.1eval()作为函数名的特殊性\h6.6.2eval()在不同上下文环境中的效果\h6.6.2.1eval使用全局环境\h6.6.2.2eval使用对象闭包或模块环境\h6.6.2.3eval()使用当前函数的闭包\h6.6.3Eval环境的独特性\h6.6.3.1默认继承当前环境的运行模式\h6.6.3.2例外:obj.eval()的特殊性\h6.6.3.3执行代码可以自行决定运行模式\h6.6.3.4声明实例化过程与其他可执行结构不同\h6.6.3.5环境的回收\h6.6.4动态执行过程中的语句、表达式与值\h6.6.5序列化与反序列化\h6.6.5.1在对象与函数上的限制\h6.6.5.2对象深度与循环引用\h6.6.5.3不太现实的替代品\h6.6.6eval对作用域的影响\h6.6.7其他的动态执行逻辑\h6.6.7.1动态创建的函数\h6.6.7.2模板与动态执行\h6.6.7.3宿主的动态执行逻辑\h6.7动态方法调用(call、apply与bind)\h6.7.1动态方法调用以及this引用的管理\h6.7.2丢失的this引用\h6.7.3bind()方法与函数的延迟调用\h6.7.4栈的可见与修改\h6.7.5严格模式中的this绑定问题\h6.8通用执行环境的实现\h6.8.1通用DSL的模型\h6.8.1.1概念设计\h6.8.1.2被依赖的基础功能\h6.8.1.3一个基本实现\h6.8.1.4应用示例\h6.8.1.5其他\h6.8.2实现ECMAScript引擎\h6.8.2.1简单入手\h6.8.2.2引擎中的环境\h6.8.2.3对用户代码的语法分析\h6.8.2.4执行前的准备工作\h6.8.2.5从语法树节点开始执行\h6.8.2.6数据的交换\h6.8.2.7上下文的使用与管理\h6.8.3与DSL的概念整合\h第7章JavaScript的并行语言特性\h7.1概述\h7.1.1并行计算的思想\h7.1.1.1并行计算范型的抽象\h7.1.1.2分布与并行逻辑\h7.1.1.3并发的讨论背景\h7.1.1.4分支也可以不是时序逻辑\h7.1.2并行程序设计的历史\h7.1.2.1从“支持并行”到并行程序语言\h7.1.2.2用并发思想处理数据的语言\h7.1.2.3多数传统程序设计语言是“伪并行”的\h7.1.2.4真正的并行:在语言层面无视时间\h7.1.3并行语言特性在JavaScript中的历史\h7.2Promise的核心机制\h7.2.1Promise的核心过程\h7.2.1.1Promise的构造方法\h7.2.1.2需要清楚的事实:没有延时\h7.2.1.3Then链\h7.2.1.4Then链中promise2的置值逻辑\h7.2.1.5Then链对值的传递以及.catch()处理\h7.2.2Promise类与对象的基本应用\h7.2.2.1Promise的其他类方法\h7.2.2.2Promise.resolve()处理thenable对象的具体方法\h7.2.2.3prom

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论