JS引用类型总结
Object 类型
创建Object实例的方式:
- var person = new Object();
- var person = { name : 'Mike', age : 23 } //属性名可以使用字符串如 'age': 23
Array 类型
创建数组的基本方式:
使用Array构造函数 (new可省略)
- var ar = new Array()
- var ar = new Array(3) //给定长度为3
- var ar = new Array('red', 'yellow', 'green')
数组字面量表示法
- var ar = ['red', 'yellow', 'green']
- var ar = []
- var ar = [ , , , , ] //错误示范,会创建一个包含4或5项的数组,每一项是undefined
length属性:
length属性不只是可读的,通过设置length属性可以从数组的末尾移除项或向数组中添加新项,数组最多可包含4294967295个项。
检测数组:
- value instanceof Array //假设只有一个全局环境
- Array.isArray(value) //低版本浏览器尚未实现该方法
- Object.prototype.toString.call(array) == '[object Array]'
转换方法:
- ar.toString() //返回每一项调用toString方法得到的字符串然后逗号拼接
- ar.toLocaleString() //返回返回每一项调用toLocaleString方法得到的字符串然后逗号拼接,在数组中包含类型为对象的项时差异较明显
- ar.valueOf() //返回该数组
- ar.join('&') //区分toString方法,逗号替换为&,分隔符可指定,当数组中某一项为null或者undefined时,转换字符串时用空字符表示
栈方法和队列方法
- push() //接收任意数量的参数,并逐个添加到数组末尾,返回数组长度
- pop() //从数组中移除最后一项,返回移除的项
- shift() //移除数组中第一项,返回移除的项
- unshift() //接收任意数量的参数,并添加到数组开头,返回数组长度
重排序方法
- ar.reverse() //数组顺序反转,在原数组上进行修改
- ar.sort() //根据字符串比较来排序而非数值大小,在原数组上进行修改
- sort()接受一个比较函数,如果第一个参数应该位于第二个参数之前则返回一个负数
操作方法
- concat() //传入数组或单个项,该方法会创建一个原数组副本并将这些数组的每一个和单个项都添加到结果数组中
- slice() //可传入两个参数m、n,表示取数组的第m项到第n项,原数组不改变,m、n为负时,加上数组长度即可
- splice(m,n,value) //从第m个项开始删除n个项,并从第m项开始插入变量value,返回一个数组包含删除的项,原数组改变
位置方法
- indexOf() //接收两个参数,要查找的项和查找起点位置索引,查找时用===匹配
- lastIndexOf //用法同上,逆序查找
迭代方法
5种迭代方法,每个方法接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象----影响this值,第一个参数函数接受三个参数:数组项的值、索引、数组对象本身,这5种方法都不会修改数组中包含的值。
- every() //对数组中每一项运行给定函数,如果该函数对每一项都返回true则返回true
- some() //对数组中每一项运行给定函数,如果该函数对任一项返回true则返回true
- filter() // 对数组中每一项运行给定函数,返回该函数会返回true的项组成的数组
- forEach() //对数组中每一项运行给定函数,这个方法没有返回值
- map() //对数组中每一项运行给定函数,返回每次函数调用的结果组成的数组
归并方法
- reduce() //接收两个参数,一个在每一项上调用的函数和(可选的)作为归并基础的初始值,第一个参数函数接收4个参数,前一个值、当前值、项的索引、数组对象,此方法通常用于求数组中所有值之和
- reduceRight() //遍历方向同reduce相反
Date类型
创建日期对象
- var now = new Date() //传入参数为1970-1-1距离指定日期的毫秒数
- parse() //此方法可以把表示日期的参数字符串'2017-(或/)3-28'或'3-28-2017'距离1970-1-1的毫秒数
- UTC() //此方法可以把表示日期的参数(2017,2,28)转化为毫秒数
- Date构造函数会模仿以上两个函数,如果直接将他们的参数传给Date构造函数,也会在后台调用相应的方法parse和UTC。
- Date.now() //返回调用这个方法的日期和时间的毫秒数
方法
- toString() toLocaleString() valueOf() //前两个返回字符串,最后一个返回毫秒数
- toDateString() //显示星期几、月、日、年
- toTimeString() //显示时、分、秒、时区,同时也有toLocaleDateString()和toLocaleTimeString()方法,区别在于表示格式不同
- toUTCString() //显示格式完整的UTC日期,toGMTString()与该方法等价,目的在于确保向后兼容
- getTime()、setTime()、getSections()、setSections()......//日期对象的读写
RegExp类型
创建正则表达式
var expression = /\[bc\]at/i //字面量形式
var expression =new RegExp('\\\[bc\\\]at','i') //所有元字符必须双重转义,\需要变成\\\\\\\\
每个正则表达式可以带有一个或多个标志(flags):
- g :全局模式,即模式会被应用于所有字符串,而非在发现第一个匹配项时立即停止。
- i :不区分大小写模式,即匹配时忽略大小写。
- m:多行模式,即在到达一行文本末尾时还会继续查找下一行中是否有与模式匹配的项。
RegExp实例属性
- global:布尔值,表示是否设置了 g 标志
- ignoreCase:布尔值,表示是否设置了 i 标志
- multiline:布尔值,表示是否设置了 m 标志
- lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起,该值在每次调用匹配方法时都会用到
- source:正则表达式的字符串表示,按照字面量形式返回
元字符
- ^ 匹配开头 /[^\,]+/表示不包含任何逗号的模式 $ 匹配结尾 . 表示任意字符
- \s 匹配空格 \d 匹配数字 \b 匹配单词边界,前导字符在前,单词在后
- * 匹配0个或多个前导字符 + 前导字符至少出现一次 ? 前导字符出现0次或1次
- {m,n} 表示至少出现m次,最多出现n次 [0-9a-z] 定义匹配的字符串范围
RegExp实例方法
- exec()· 专门为捕获组而设计,接受一个要应用模式的字符串为参数,返回包含第一个匹配项信息(首次匹配到的项)的数组,在没有匹配项(没有整个模式的匹配项)时返回null。
- · 数组第1项是与整个模式匹配的字符串,其它项是与模式中捕获组匹配的字符串,数组还包含两个额外属性 input 和 index ,分别为输入的字符串和整个模式匹配项在字符串中位置
- · 当模式设置了 g 标志,RegExp实例(模式)每执行一次 exec() 方法,他的的 lastIndex 属性就会改变一次;若没有设置 g ,则 lastIndex 恒等于0
- test() · 接受一个字符串参数,模式匹配返回 true,否则 false
- toString()、toLocaleString()、valueOf()· 都会像它是字面量形式创建的一样显示其字符串表示。
RegExp构造函数属性
长属性名 | 短属性名 | 说明 |
input | $_ | 最近一次要匹配的字符串 |
lastMatch | $& | 最近一次的匹配项 |
lastParen | $+ | 最近一次匹配的捕获组 |
leftContext | $ ` | input 字符串中 lastMatch 之前的字符串 |
rightContext | $' | input 字符串中 lastMatch 之后的字符串 |
multiline | $* | 布尔值,表示是否所有表达式都使用多行模式 |
$1 / $2 / $3 ··· | 表示一个模式中第n个匹配的捕获组,在调用exec、test方法时会被自动填充 |
String类型的match()方法(接受一个Regexp实例或者字符串作为参数)
- regexp 没有 g 标志
· match() 方法就只在 stringObject 中执行一次匹配,返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本,除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。这里跟exec()方法类似
- regexp 有 g 标志
· match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串(区分子表达式),而且也没有 index 属性或 input 属性,regexp实例的lastIndex属性恒为0。不同于exec()方法
· 在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。