第 5 章 引用类型
![](https://github.com/luohong123/js-advance-program/blob/master/%E7%AC%AC%205%20%E7%AB%A0%20%E5%BC%95%E7%94%A8%E7%B1%BB%E5%9E%8B/%E7%AC%AC%205%20%E7%AB%A0%20%E5%BC%95%E7%94%A8%E7%B1%BB%E5%9E%8B.png)
5.1 Object 类型
1、建议使用点表示法,除非必须使用变量来访问属性
5.2 Array 类型
1、检测数组
(1)instanceof
- 问题 - 假定只有一个全局执行环境。如果网页中包含多个框架,那实 际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的 Array 构造函数。如果你从 一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。
(2)Array.isArray()
- 支持浏览器 - 有 IE9+、Firefox 4+、Safari 5+、Opera 10.5+和 Chrome
2、转换方法
(1)toString()
- 返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串
(2)toLocaleString()
(3)valueOf()
(4)join()
3、栈方法
- Last-In-First-Out,后进先出
- push() 数组末尾添加
- pop() 数组末尾移除
4、队列方法
- First-In-Fisrt-Out, 先进先出
- shift() 移除第一项
- unshift() 在数组前端添加任意个项并返回新数组的长度
5、重排序方法
- reverse() 反转数组项
- sort(函数)
6、操作方法
concat()
- 基于当前数组中的所有项创建一个新数组,返回新构建的数组
slice()
- 基于当前数组中的一或多个项创建一个新数组,不会影响原始数组,如.slice(1,4)返回索引1到索引3位置的项
splice()
- 删除 - 可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。 例如,splice(0,2)会删除数组中的前两项 - 插入 - 可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、0(要删除的项数) 和要插入的项 - 替换 - 可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数
7、位置方法
indexOf(要查找的项,查找起点位置的索引)
- 从数组的开头(位 置 0)开始向后查找,在没找到的情况下返回 -1
lastIndexOf(要查找的项,查找起点位置的索引)
- 从数组的末尾开始向前查找,在没找到的情况下返回 -1
8、迭代方法
every()
- 对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true
filter()
- 对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组
forEach()
- 对数组中的每一项运行给定函数。这个方法没有返回值
map()
- 对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组
some()
- 对数组中的每一项运行给定函数,如果该函数对任一项返回 true,则返回 true
9、归并方法
reduce()
- 从数组的第一项开始,逐个遍历到最后
reduceRight()
- 从数组的最后一项开始,向前遍历到第一项
5.3 Date 类型
1、继承的方法
toLacaleString()
- 按照与浏览器 设置的地区相适应的格式返回日期和时间
toString()
- 返回带有时区信息的日期和 时间
valueOf()
- 不返回字符串,而是返回日期的毫秒表示
2、日期格式化方法
toDateString()
- 以特定于实现的格式显示星期几、月、日和年
toTimeString()
- 以特定于实现的格式显示时、分、秒和时区
toLocaleDateString()
- 以特定于地区的格式显示星期几、月、日和年
toLocaleTimeString()
- 以特定于实现的格式显示时、分、秒
toUTCString()
- 以特定于实现的格式完整的 UTC 日期
3、日期/时间组件方法
5.4 RegExp 类型
1、RegExp 实例属性
global
- 布尔值,表示是否设置了 g 标志
ignoreCase
- 布尔值,表示是否设置了 i 标志
lastIndex
- 整数,表示开始搜索下一个匹配项的字符位置,从 0 算起
multiline
- 布尔值,表示是否设置了 m 标志
source
- 正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回
2、RegExp 实例方法
- exec()
- test()
3、RegExp 构造函数属性
input
- 最近一次要匹配的字符串
lastMatch
- 最近一次的匹配项
lastParen
- 最近一次匹配的捕获组
leftContext
- input字符串中lastMatch之前的文本
multiline
- 布尔值,表示是否所有表达式都使用多行模式
rightContext
- Input字符串中lastMatch之后的文本
4、模式的局限性
- 匹配字符串开始和结尾的\A 和\Z 锚
- 向后查找
- 并集和交集类
- 原子组
- Unicode 支持
- 命名的捕获组
- s(single,单行)和 x(free-spacing,无间隔)匹配模式
- 条件匹配
- 正则表达式注释
5.5 Function 类型
1、没有重载(深入理解)
- 没有函数重载,后面的函数会覆盖前面的函数
2、函数声明与函数表达式
- 函数声明能提升,函数表达式不能提升
3、作为值的函数
4、函数内部属性
arguments
- 保存函数参数
this
5、函数属性和方法
属性
- length - prototype
方法
- call(this,...,) - apply(this,[]) - bind()
5.6 基本包装类型
1、Boolean 类型
2、Number 类型
valueOf()
toLocaleString()
toString()
toFixed()
- 按照指定的小数位返回数值的字符串表示
toExponential()
- 返回以指数表示法
3、String 类型
(1)new String() 过程
- 第一步: 创建 String 类型的一个实例 - 第二步:在实例上调用指定的方法 - 第三步: 销毁这个实例
(2)字符方法
- chartAt() - 以单字符字符串的形式返回给定位置的那个字符 - chartCodeAt() - 返回字符编码 - stringValue([])
(3)字符串操作方法
- concat() - slice() - 第一个参数指定字符串的开始位置 - 负值 - 将传 入的负值与字符串的长度相加 - substr() - 第一个参数指定字符串的开始位置,第二个参数指定返回的字符个数 - 负值 - 将负的第一个参数加上字符串的长度,而将负的第二个 参数转换为 0 - substring() - 第一个参数指定字符串的开始位置 - 负值 - 把所有负值参数都转换为 0,将较小的数作为开始位置,将较大的数作为结束位
(4)字符串位置方法
- indexOf() - 返回子字符串的位置,如果没有找到该字符串,则返回 -1 - lastIndexOf() - 返回子字符串的位置,如果没有找到该字符串,则返回 -1
(5)trim()方法
- 创建一个字符串的副本,删除前置及 后缀的所有空格,然后返回结果,原始字符串中的前置及后缀空格会保持不变
(6)字符串大小写转换方法
- toLowerCase() 小写 - toLocaleLowerCase() 小写 - toUpperCase() 大写 - toLocaleUpperCase() 大写
(7)字符串的模式匹配方法
- match(),如果没有找到匹配项,返回 -1 - replace() - split()
(8)localeCompare()方法
- 如果字符串在字母表中应该排在字符串参数之前,则返回一个负数 - 如果字符串等于字符串参数,则返回 0 - 如果字符串在字母表中应该排在字符串参数之后,则返回一个正数
(9)fromCharCode()方法
(10)HTML 方法
5.7 单体内置对象
1、Global 对象
(1)URI 编码方法
- encodeURI() - encodeURIComponent()
(2)eval()方法
- 在 eval()中创建的任何变量或函数都不会被提升,因为在解析代码的时候,它们被包含在一个字 符串中;它们只在 eval()执行的时候创建
(3)属性
- undefined - NaN - Infinity - Object - Array - Function - Boolean - String - Number - Date - RegExp - Error - EvalError - rangeError - ReferenceError - SyntaxError - TypeError - URIError
(4)window 对象
2、Math 对象
(1)Math 对象的属性
(2)min() 和 max()方法
(3)舍入方法
- Math.ceil() - 执行向上舍入,即它总是将数值向上舍入为最接近的整数 - Math.floor() - 执行向下舍入,即它总是将数值向下舍入为最接近的整数 - Math.round() - 执行标准舍入,即它总是将数值四舍五入为最接近的整数
(4)random()方法
- Math.random() - 返回大于等于 0 小于 1 的一个随机数
(5)其他方法
- Math.abs(num) - 返回num 的绝对值
5.8 小结
引用类型与传统面向对象程序设计中的类相似,但实现不同
Object 是一个基础类型,其他所有类型都从 Object 继承了基本的行为
Array 类型是一组值的有序列表,同时还提供了操作和转换这些值的功能
Date 类型提供了有关日期和时间的信息,包括当前日期和时间以及相关的计算功能
RegExp 类型是 ECMAScript 支持正则表达式的一个接口,提供了最基本的和一些高级的正则表 达式功能
函数是对象,所以函数也拥有方法,可以用来增强其行为
基本包装类型
- 每个包装类型都映射到同名的基本类型
- 在读取模式下访问基本类型值时,就会创建对应的基本包装类型的一个对象,从而方便了数据的操作
- 操作基本类型值的语句一经执行完毕,就会立即销毁新创建的包装对象