深入理解JavaScript(异步图书)
- 体积:50.71 MB
- 语言:中文
- 日期:2018-03-05
- 推荐:人
简介:JavaScript是目前Web开发领域非常流行的一种编程语言,得到众多IT从业人员和编程爱好者的关注。本书是一本全面、深入介绍JavaScript语言的学习指南。本书共分四个部分,第1部分帮助读者快速入手,掌握基本的JavaScript编程要点;第2部分介绍JavaScript的发展和技术背景;第3部分深入探索JavaScript,介绍了语法、值、运算符、布尔类型、数字、字符串、语句、异常捕获、函数、变量、对象与继承、数组、正则表达式、Date、Math、JSON、标准全局变量、编码和JavaScript、ECMAScript 5的新特性等内容;第4部分介绍技巧、工具和类库,帮助读者更好地运用JavaScript进行编程。本书内容由浅入深,非常适合想要快速学习JavaScript编程或者深入钻研JavaScript的读者参考。
这些资源你可能感兴趣
JavaScript是目前Web开发领域非常流行的一种编程语言,得到众多IT从业人员和编程爱好者的关注。
本书是一本全面、深入介绍JavaScript语言的学习指南。本书共分四个部分,第1部分帮助读者快速入手,掌握基本的JavaScript编程要点;第2部分介绍JavaScript的发展和技术背景;第3部分深入探索JavaScript,介绍了语法、值、运算符、布尔类型、数字、字符串、语句、异常捕获、函数、变量、对象与继承、数组、正则表达式、Date、Math、JSON、标准全局变量、编码和JavaScript、ECMAScript 5的新特性等内容;第4部分介绍技巧、工具和类库,帮助读者更好地运用JavaScript进行编程。
本书内容由浅入深,非常适合想要快速学习JavaScript编程或者深入钻研JavaScript的读者参考。
编辑推荐
本书针对JavaScript初学者,帮助读者掌握JavaScript开发的精髓。每一章从教授语言的一个主题开始,给出了实践以及解决实际缺陷的指南,然后深入到相关的信息。本书帮助入门的程序员理解基础知识,掌握核心实践,甚到深入了解一些实践方法的优缺点,做到知其然且知其所以然。
《JavaScript启示录》一书作者Cody Lindley鼎力推荐
喜欢,又或是不喜欢,JavaScript都在那里,日夜相随,不离不弃。JavaScript正越来越多地出现在我们的生活中,从浏览器到服务端,再到移动端。想要学习这种语言,或者深入了解一些你没有涉足的内容,本书正是你的选择,它既可以指引入门也能够带你深入JavaScript。作者是一位程序员,也曾在相同的处境中暮然回首,找到了真实的自己。
本书通过4个独立部分引 领读者逐步接近JavaScript语言。首先,快速指引部分帮助你在JavaScript编程上变得富有成效。更有经验的程序员会返现有一个完整而易读的参考,深入覆盖了该语言的每个特性。
本书包括以下内容:
JavaScript快速上手:更习惯面向对象的编程?这个部分会帮你更快更好地开始学习JavaScript。
背景:了解JavaScript的历史,以及它与其他语言之间的关系。
深入JavaScript:详细学习ECMAScript 5,从语法,变量,函数,面向对象编程,再到正则表达式和JSON,以及大量的示例。
技巧、工具和类库:对现有风格指引、实践、高阶技术、模块系统、包管理、构建工具进行调研和学习。
作者简介
Dr.Axel Rauschmayer 专攻JavaScript和Web开发领域。他写博客,教Ecmanauten,编辑JavaScript Weekly周刊,组织MunichJS用户组。Axel从1985年开始编程,1995年开始开发web应用。
目录
第1部分JavaScript快速上手
第1章基础JavaScript
1.1背景
1.1.1JavaScript与ECMAScript
1.1.2JavaScript的影响和本质
1.2语法
1.2.1语法概述
1.2.2语句和表达式
1.2.3分号
1.2.4注释
1.3变量和赋值
1.3.1赋值
1.3.2复合赋值运算符
1.3.3标识符与变量名
1.4值
1.4.1原始值和对象
1.4.2原始值
1.4.3对象
1.4.4undefined和null
1.4.5使用typeof和instanceof对值分类
1.5布尔值
1.5.1真值与假值
1.5.2二元逻辑运算符
1.5.3等式运算符
1.6数字
1.7运算符
1.8字符串
1.8.1字符串运算符
1.8.2字符串方法
1.9语句
1.9.1条件语句
1.9.2循环语句
1.10函数
1.10.1函数声明的提升特性
1.10.2特殊的变量arguments
1.10.3参数太多或太少
1.10.4可选参数
1.10.5强制参数长度
1.10.6将arguments转换为数组
1.11异常捕获
1.12严格模式
1.13变量作用域和闭包
1.13.1变量是函数作用域的
1.13.2变量的提升特性
1.13.3闭包
1.13.4IIFE模式:引入一个新的作用域
1.14对象和构造函数
1.14.1单一对象
1.14.2任意属性名
1.14.3提取方法
1.14.4方法中的函数
1.14.5构造函数:对象工厂
1.15数组
1.15.1数组字面量
1.15.2数组方法
1.15.3遍历数组
1.16正则表达式
1.16.1test()方法:匹配吗
1.16.2exec()方法:匹配以及捕获分组
1.16.3replace()方法:搜索和替换
1.17Math
1.18标准库的其他功能
第2部分背景
第2章为什么选择JavaScript
2.1JavaScript可以自由使用吗
2.2JavaScript优雅吗
2.3JavaScript有用吗
2.3.1图形用户界面
2.3.2其他技术补充完善JavaScript
2.4JavaScript有什么好用的工具吗
2.5JavaScript是否足够快
2.6JavaScript是广泛使用的吗
2.7JavaScript有前途吗
2.8结论
第3章JavaScript的性质
3.1古怪和非官方特性
3.2优雅部分
3.3影响
第4章JavaScript是如何创造出来的
第5章标准化:ECMAScript
第6章JavaScript的历史里程碑
第3部分深入JavaScript
第7章JavaScript的语法
7.1语法概览
7.2注释
7.3表达式与语句
7.3.1表达式
7.3.2语句
7.4控制流语句和块
7.5使用分号的规则
7.5.1以块结束的语句后面没有分号
7.5.2空语句
7.5.3自动分号插入
7.6合法标识符
7.7数字字面量的方法调用
7.8严格模式
7.8.1启用严格模式
7.8.2严格模式:建议与注意事项
7.8.3严格模式中,变量必须被声明
7.8.4严格模式下的函数
7.8.5严格模式中,设置或者删除不可改变的属性会抛出异常
7.8.6严格模式中的不合格标识符不能删除
7.8.7严格模式中,eval更加简洁
7.8.8严格模式中禁用的特性
第8章值
8.1JavaScript中的类型体系
8.1.1JavaScript类型
8.1.2静态与动态
8.1.3静态类型与动态类型
8.1.4静态类型检查和动态类型检查
8.1.5强制转换
8.2原始值和对象
8.2.1原始值
8.2.2对象
8.3undefined和null
8.3.1undefined和null的出现场景
8.3.2检测undefined和null
8.3.3undefined和null的历史
8.3.4修改undefined
8.4原始值的包装对象
8.4.1包装对象不同于原始值
8.4.2原始值的包装与去包装
8.4.3原始值从包装器借调方法
8.5强制类型转换
8.5.1强制类型转换会隐藏bug
8.5.2转换成布尔值、数字、字符串和对象的函数
8.5.3算法:ToPrimitive()—将值转换为原始值
第9章运算符
9.1运算符和对象
9.2赋值运算符
9.3等号运算符:===和==
9.3.1严格相等(===,!==)
9.3.2普通(宽松)相等(==,!=)
9.3.3没有针对==的有效用例
9.4排序运算符
9.5加号运算符(+)
9.6布尔运算符和数字运算符
9.7特殊运算符
9.7.1条件运算符(?:)
9.7.2逗号运算符
9.7.3void运算符
9.8通过typeof和instanceof判断值类型
9.8.1typeof:判断原始值
9.8.2instanceof:检测对象是否是给定构造函数的实例
9.9对象运算符
第10章布尔类型
10.1转换成布尔值
10.1.1手动转换为布尔值
10.1.2真值和假值
10.2逻辑运算符
10.2.1二元逻辑运算符:与(&&)和或(||)
10.2.2逻辑与(&&)
10.2.3逻辑或(||)
10.2.4逻辑非(!)
10.3等号运算符、排序运算符
10.4Boolean函数
第11章数字
11.1数字字面量
11.1.1说明
11.1.2在字面量上调用方法
11.2转换成数字
11.2.1手动转换为数字
11.2.2parseFloat()
11.3特殊的数字值
11.3.1NaN
11.3.2Infinity
11.3.3两个0
11.4数字的内部表示
11.5处理舍入错误
11.6JavaScript中的整型
11.6.1整型的范围
11.6.2将整型表示为浮点数字
11.6.3安全的整型
11.7转换成整数
11.7.1通过Math.floor(),Math.ceil()和Math.round()得到整数
11.7.2通过定制函数ToInteger()得到整数
11.7.3通过位运算符得到32位整数
11.7.4通过parseInt()得到整数
11.8算术运算符
11.9位运算符
11.9.1背景知识
11.9.2位运算非操作符
11.9.3二进制位运算符
11.9.4位运算移位操作符
11.10Number函数
11.11Number构造器属性
11.12Number原型方法
11.12.1Number.prototype.toFixed(fractionDigits?)
11.12.2Number.prototype.toPrecision(precision?)
11.12.3Number.prototype.toString(radix?)
11.12.4Number.prototype.toExponential(fractionDigits?)
11.13用于数字的函数
11.14本章参考资料
第12章字符串
12.1字符串字面量
12.2字符串字面量中的转义字符
12.3字符访问
12.4转换为字符串
12.5字符串比较
12.6字符串拼接
12.6.1合并:加号(+)运算符
12.6.2合并:拼接字符串数组
12.7字符串函数
12.8字符串构造器方法
12.9字符串length属性
12.10字符串原型方法
12.10.1提取子字符串
12.10.2字符串的变换
12.10.3字符串的检索和比较
12.10.4支持正则表达式的方法
第13章语句
13.1声明和变量赋值
13.2循环语句和条件语句的主体
13.3循环
13.3.1循环的机制
13.3.2while
13.3.3do—while
13.3.4for
13.3.5for—in
13.3.6foreach—in
13.4条件语句
13.4.1if—then—else
13.4.2switch
13.5with语句
13.5.1语法与语义
13.5.2with语句已被废弃
13.5.3废弃with的原因
13.6debugger语句
第14章异常捕获
14.1什么是异常捕获
14.2JavaScript中的异常捕获
14.2.1throw
14.2.2try—catch—finally
14.2.3例子
14.3Error构造器
14.4栈跟踪
14.5实现一个自己的异常构造器
第15章函数
15.1JavaScript中函数的3种形式
15.2术语:“形参”和“实参”
15.3定义函数
15.3.1函数表达式
15.3.2函数声明
15.3.3Function构造器
15.4函数提升
15.5函数的名称
15.6哪个更好,函数声明还是函数表达式
15.7控制函数调用:call(),apply()和bind()
15.7.1func.apply(thisValue,argArray)
15.7.2func.bind(thisValue,arg1,...,argN)
15.8参数缺失或者超出时的处理
15.8.1通过索引访问所有参数:神奇的arguments变量
15.8.2强制性参数,限制参数数量的最小值
15.8.3可选参数
15.8.4模拟参数的引用传递
15.8.5陷阱:非预期的可选参数
15.9具名参数
15.9.1具名参数可作为描述信息
15.9.2可选的具名参数
15.9.3在JavaScript中模拟具名参数
第16章变量:作用域、环境和闭包
16.1定义变量
16.2背景知识:静态性和动态性
16.3背景知识:变量的作用域
16.4变量以函数为作用域
16.5变量声明的提前
16.6通过IIFE引入新的作用域
16.6.1IIFE变体:前缀运算符
16.6.2IIFE变体:预内置表达式上下文
16.6.3IIFE变体:传参的IIFE
16.6.4IIFE的应用
16.7全局变量
16.7.1最佳实践:避免创建全局变量
16.7.2模块系统可以减少全局变量的引入
16.8全局对象
16.8.1跨平台兼容
16.8.2window的使用场景
16.9环境:变量的管理
16.10闭包:使得函数可以维持其创建时所在的作用域
16.10.1通过环境来控制闭包
16.10.2陷阱:不经意间的环境共用
第17章对象与继承
17.1第1层:单一对象
17.1.1属性的种类
17.1.2对象字面量
17.1.3点运算符(.):通过固定键值访问属性
17.1.4特殊的属性键
17.1.5中括号操作符(()):通过计算出的键访问属性
17.2把任意值转化为对象
17.3this作为函数和方法的隐式参数
17.3.1在调用函数时设置this:call(),apply()和bind()
17.3.2“用于构造函数的apply()”详细阐述了如何配合构造函数
使用apply()
17.3.3用于构造函数的apply()
17.3.4缺陷:提取方法时丢失this
17.3.5缺陷:方法中的函数会掩盖this
17.4第2层:对象间的原型关系
17.4.1继承
17.4.2覆写
17.4.3通过原型在对象间共享数据
17.4.4获取和设置原型
17.4.5特殊属性__proto__
17.4.6设置和删除仅影响自有属性
17.5遍历和检测属性
17.5.1列出自有的属性键
17.5.2列出所有的属性键
17.5.3检测属性是否存在
17.5.4示例
17.6最佳实践:遍历自有属性
17.7访问器(getter和setter)
17.7.1通过对象字面量定义访问器
17.7.2通过属性描述符定义访问器
17.7.3访问器和继承
17.8属性特性和属性描述符
17.8.1属性特性
17.8.2属性描述符
17.8.3通过描述符获取和定义属性
17.8.4复制对象
17.8.5属性:定义与赋值
17.8.6继承的只读属性不能被赋值
17.8.7枚举性:最佳实践
17.9保护对象
17.9.1防止扩展
17.9.2封闭
17.9.3冻结
17.9.4缺陷:保护是浅层的
17.10第3层:构造函数—实例工厂
17.10.1JavaScript中new操作符的实现
17.10.2术语:两个原型
17.10.3实例的constructor属性
17.10.4instanceof运算符
17.10.5实现构造函数的小技巧
17.11原型属性中的数据
17.11.1对于实例属性,避免使用带初始值的原型属性
17.11.2避免非多态的原型属性
17.11.3多态的原型属性
17.12保持数据私有性
17.12.1构造函数环境中的私有数据(Crockford私有模式)
17.12.2使用标记的键的属性保存私有数据
17.12.3使用具体化键的属性保存私有数据
17.12.4通过IIFE保持全局数据私有
17.13第4层:构造函数之间的继承
17.13.1继承实例属性
17.13.2继承原型属性
17.13.3确保instanceof正常工作
17.13.4覆写方法
17.13.5父调用
17.13.6避免硬编码父构造函数的名字
17.13.7示例:构造函数继承
17.13.8示例:内建构造函数的继承层次结构
17.13.9反模式:原型是父构造函数的实例
17.14所有对象的方法
17.14.1转换为原始值
17.14.2Object.prototype.toLocaleString()
17.14.3原型式继承和属性
17.15泛型方法:借用原型方法
17.15.1通过字面量访问Object.prototype和Array.prototype
17.15.2调用泛型方法的例子
17.15.3类似数组的对象和泛型方法
17.15.4所有泛型方法列表
17.16缺陷:Object作为Map使用
17.16.1缺陷1:继承影响读取属性
17.16.2缺陷2:覆写会影响调用方法
17.16.3缺陷3:特殊属性__proto__
17.16.4字典模式:没有原型的对象更适合用作映射
17.16.5最佳实践
17.17备忘录:对象的使用
第18章数组
18.1概述
18.1.1数组是映射,不是元组
18.1.2数组也可以具有属性
18.2创建数组
18.2.1数组构造函数
18.2.2多维数组
18.3数组索引
18.3.1操作符in与索引
18.3.2删除数组元素
18.3.3数组索引的细节
18.4长度
18.4.1手动增加数组的长度
18.4.2减少数组的长度
18.4.3最大长度
18.5数组中的“空缺”
18.5.1创建空缺
18.5.2稀疏数组和密集数组
18.5.3哪些操作会忽略空缺,而哪些不会
18.5.4移除数组中的空缺
18.6数组构造函数
18.7数组原型方法
18.8添加和删除元素(破坏性地)
18.9排序和颠倒元素顺序(破坏性地)
18.9.1比较数字
18.9.2比较字符串
18.9.3比较对象
18.10合并、切分和连接(非破坏性地)
18.11值的查找(非破坏性地)
18.12迭代(非破坏性地)
18.12.1检测方法
18.12.2转化方法
18.12.3归约函数
18.13缺陷:类数组对象
18.14最佳实践:遍历数组
第19章正则表达式
19.1正则表达式语法
19.1.1原子:常规
19.1.2原子:字符类
19.1.3原子:分组
19.1.4量词
19.1.5断言
19.1.6析取(或)
19.2Unicode和正则表达式
19.3创建正则表达式
19.3.1字面量与构造函数
19.3.2标识
19.3.3正则表达式的实例属性
19.3.4几个创建正则表达式的例子
19.4RegExp.prototype.test:是否存在匹配
19.5String.prototype.search:匹配位置的索引
19.6RegExp.prototype.exec:捕获分组
19.6.1首次匹配(不设置标识/g)
19.6.2全部匹配(设置标识/g)
19.7String.prototype.match:捕获分组或返回所有匹配的子字符串
19.8String.prototype.replace:查找和替换
19.8.1Replacement为字符串的情况
19.8.2当Replacement为函数时
19.9标识/g的一些问题
19.10提示与技巧
19.10.1引用文本
19.10.2陷阱:缺少断言(例如;、$)的正则表达式可以在任意位置匹配
19.10.3匹配一切或什么都不匹配
19.10.4手动实现逆向查找
19.11正则表达式备忘单
第20章Date
20.1Date构造函数
20.2Date构造函数方法
20.3Date原型方法
20.3.1时间单位的getter和setter方法
20.3.2各种各样的getter和setter方法
20.3.3将日期转换成字符串
20.4日期和时间格式
20.4.1日期格式(无时间)
20.4.2时间格式(无日期)
20.4.3日期时间格式
20.5时间值:从1970—01—01开始的毫秒数
第21章Math
21.1Math属性
21.2数值函数
21.3三角函数
21.4其他函数
第22章JSON
22.1背景
22.1.1数据格式
22.1.2历史
22.1.3语法
22.2JSON.stringify(value,replacer?,space?)
22.2.1被JSON.stringify()忽略的数据
22.2.2toJSON()方法
22.3JSON.parse(text,reviver?)
22.4通过节点访问函数转换数据
22.4.1JSON.stringify()
22.4.2JSON.parse()
第23章标准全局变量
23.1构造器
23.2Error构造器
23.3非构造器函数
23.3.1文字的编码和解码
23.3.2数值归类与数值转换
23.4通过eval()和newFunction()来动态执行JavaScript代码
23.4.1使用eval()执行代码
23.4.2通过newFunction()执行代码
23.4.3eval()与newFunction()比较
23.4.4最佳实践
23.4.5结论
23.5ConsoleAPI
23.5.1ConsoleAPI在各引擎的标准程度如何
23.5.2简单的日志记录
23.5.3检查和计数
23.5.4格式化的日志
23.5.5性能和时间
23.6名称空间和特殊值
第24章编码和JavaScript
24.1Unicode历史
24.2Unicode中的重要概念
24.3码位
24.4Unicode编码
24.5JavaScript源码和Unicode
24.5.1内部源码转化
24.5.2源码外部转化
24.6JavaScript字符串和Unicode
24.6.1转义序列
24.6.2通过转义引用星际平面的字符
24.6.3字符长度计算
24.6.4Unicode正常化
24.7JavaScript正则表达式和Unicode
24.7.1匹配任意的码元以及任意的码位
24.7.2库
24.7.3推荐阅读的章节资源
第25章ECMAScript5的新特性
25.1新特性
25.2语法的改变
25.3标准库的新功能
25.3.1元编程
25.3.2新方法
25.3.3JSON
25.4兼容旧浏览器的小贴士
第4部分技巧、工具和类库
第26章元编程风格指南
26.1现有风格指南
26.2通用技巧
26.2.1代码应该具有一致性
26.2.2代码应该易于理解
26.3普遍认可的最佳实践
26.3.1括号风格
26.3.2推荐字面量而不是构造函数
26.3.3不要自作聪明
26.3.4可接受的技巧
26.4具有争议的规则
26.4.1语法
26.4.2变量
26.4.3面向对象
26.4.4其他
26.5结论
第27章调试的语言机制
第28章子类化内置构造函数
28.1术语
28.2障碍1:具有内部属性的实例
28.2.1障碍1的解决方法
28.2.2注意
28.3障碍2:内置的构造函数不能作为方法调用
28.4另一种解决方案:委托
第29章JSDoc:生成API文档
29.1JSDoc基础
29.1.1语法
29.1.2命名类型
29.2基础的标签
29.3文档记录函数和方法
29.4行内类型信息(“行内文档注释”)
29.5文档记录变量、参数和实例属性
29.6文档记录类
29.6.1通过构造函数定义类
29.6.2通过对象字面量定义类
29.6.3通过带有@constructs方法的对象字面量定义类
29.6.4子类
29.7其他有用的标签
第30章类库
30.1shim和polyfill
30.2四个语言类库
30.3ECMAScript的国际化API
30.3.1ECMAScript的国际化API,第1版
30.3.2它是怎么样的标准呢
30.3.3我们可以用它做什么
30.3.4延伸阅读
30.4JavaScript资源目录
第31章模块系统和包管理器
31.1模块系统
31.2包管理器
31.3简单粗暴的模块实现
第32章其他工具
第33章接下来该做什么
本书评论