JavaScript中的引用类型
Object类型
创建方式:
1.new操作符后跟构造函数:var person = new Object(),new操作符可以省略;
2.字面量:var person = {a: 1, b: 2};
访问方式:
1.点表示法:点表示法console.log(person.name);
2.键访问:方括号中将要访问的属性以字符串的形式写入(person['name']),支持拼接字符串/避免关键字或保留字;
Array类型
创建方式:
1.new操作符后跟构造函数:var arr = new Array(),new操作符可以省略;
构造函数支持参数:1)传入数值指定创建数组的项数;2)传入以逗号连接的项作为数组内容;
2.字面量:var colors = ['red', 'blue'];
访问方式:
在读取或设置数组的值时,需使用方括号并提供相应值的基于0的索引;console.log(colors[1]);
通过索引的访问方式,如果没有某个值的索引,即超过了现有数组的项数,若为设置操作,则会自动创建至改索引值加1的长度,若为访问操作,则返回undefined;
数组的项数始终保存在其length属性中(colors.length),该值为非只读属性,支持动态设置,操作结果为在数组末尾删除或增加项;
检测方式:
1.使用instanceof操作符:value instanceof Array;
2.使用Array.isArray方法,传入想要检测的数组标识符;
转换方法:
1.使用toString方法,将数组中的每一项的字符串形式拼接以逗号分隔的字符串;
2.使用valueOf方法,返回当前数组;
2.使用join方法,支持传入分割符作为参数,将数组转换为字符串(分隔符仅顶层有效);
栈方法(LIFO: last-in-first-out):
1.push:接受任意数量参数,逐个加入到数组末尾,返回修改后数组的长度;
2.pop:从数组末尾删除最后一项,并返回删除项;
队列方法(FIFO:first-in-first-out):
1.shift:从数组头部删除第一项,并返回删除项;
2.unshift:接受任意数量参数,逐个加入到数组头部,返回修改后数组的长度;
重排序方法:
1.reserve方法:反转当前数组;
1.sort方法:默认降数组每一项使用toString方法,然后做升序排序;
接受一个比较函数作为参数,该函数接受两个参数,如果参1应该位于参2前面则返回负数,相等放回0,参1应该位于参2后面 则返回正数;
操作方法:
1.concat方法:接受任意数量的参数,若参数为数组,将每一项添加到数组的末尾,返回新数组,仅支持一层非深度拷贝;
2.slice方法:接受两个参数,起始位置和结束位置,结束位置不包含,返回新数组,仅支持一层非深度拷贝;
3.splice方法:删除用法,指定两个参数,起始位置和删除的项数;
插入或替换,插入的位置,替换的数量,后面任意项;
位置方法:
1.indexOf方法:接受两个参数,查找的值,起始位置,从数组头部往后,全等判断,返回-1或找到的第一项的索引;
2.lastIndexOf方法:接受两个参数,查找的值,起始位置,从数组末尾向前,全等判断,返回-1或找到的第一项的索引;
迭代方法:
共五个迭代方法,每个方法支持2个参数:要在每一项上运行的函数,运行该函数的作用域对象(this);
运行在每一项上的函数接受三个参数,当前项,当前索引,数组对象本身;
1.every方法:对数组中的每一项运行给定函数,如果该函数每一次都返回true,则返回true;
2.filter方法:对数组中的每一项运行给定函数,返回函数会返回true的项组成的数组;
3.forEach方法:对数组中的每一项运行给定函数,没有返回值;
4.map方法:对数组中的每一项运行给定函数,返回每次调用返回结果组成的数组;
5.some方法:对数组中的每一项运行给定函数,如果有一次返回true,则返回true;
归并方法:
1.reduce方法:待补充;
2.reduceRight方法:待补充;
Date类型
1970年1月1日零时开始经过的毫秒数表示;
创建方式:
1.new操作符后跟构造函数:var now= new Date(),new操作符可以省略;
构造函数支持传入该日期的毫秒数,parse方法支持转换日期字符串至对应的毫秒数,直接传给构造函数也将会调用parse方法做转换操作;
转换方法:
1.使用toString方法,返回太平洋标准时间的字符串;
2.使用valueOf方法,返回毫秒数;
RegExp类型:
创建方式:
1.new操作符后跟构造函数,var pattern = new RegExp('[bc]at', 'gi'),new操作符可以省略;
2.字面量:var pattern = /[bc]at/gi;(/pattern/flags)
flags表示该正则表达式的匹配模式,g(全局模式),i(不区分大小写),m(多行)
实例属性:
1.global:布尔值,表示是否设置了g标志;
2.ignoreCase:布尔值,表示是否设置了i标志;
3.lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0开始;
4.multiline:布尔值,表示是否设置了m标志;
5.source:正则表达式的字符串表示,表示是否设置了g标志;
实例方法:
1.exec方法:为捕获组而设计,接受一个参数,即需要应用的字符串,然后返回包含第一个匹配项的信息数组,没有匹配项则返回null,额外两个属性index和input,index表示匹配项在字符串中的位置,input表示应用正则表达式的字符串;
2.test方法:接受一个参数,即需要应用的字符串,匹配时返回true,否则返回false;
RegExp构造函数属性:
1.input:最近一次要匹配的字符串;
2.lastMattch:最近一次的匹配项;
3.lastParen:最近一次匹配的捕获组;
4.leftContext:input字符串中lastMatch之前的文本;
5.multiline:布尔值,是否所有表达式都是用多行模式;
6.rightContext:input字符串中lastMatch之后的文本;
Function类型:
创建方式:
1.函数声明语法;
2.函数表达式语法(函数表达式与函数声明的区别,提升问题);
3.new操作符后跟构造函数的方式;
函数内部属性:
1.arguments:数组对象,包含传入函数中的所有参数,具有callee属性,是一个指针,指向拥有这个arguments对象的函数;
2.this:是一个当前函数执行的环境对象的引用;
实例属性和方法:
1.length:表示函数希望接收的命名参数个数;
2.call:调用函数,设置函数体内this对象的值,并传入参数序列;
3.apply:调用函数,设置函数体内this对象的值,传入参数数组;
4.bind:创建一个函数的实例,绑定对应的this值;
基本包装类型:
ECMAScript提供了三种特殊的引用类型:Boolean、Number、String。与其他引用类型相似,但同时也具有与它对应的基本类型相应的特殊行为;
example:
图中声明了一个s1作为String基本数据类型,不应该有方法;
但在第二行代码访问s1时,访问过程处于一种读取模式,从内存中读取这个字符串的值,后台自动完成了下列操作;
1)创建一个String类型的一个实例;
2)在实例上调用指定的方法;
3)销毁这个实例;
引用类型与基本包装类型的主要区别就是对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域前都会一直保留在内存中,而自动创建的基本包装类型的实例,则只存在于一行代码的执行瞬间,然后立即被销毁;
允许显式创建基本包装类型的实例,但绝对不要这样做!
Object构造函数也会和工厂函数一样,根据传入值的类型返回一个相应的基本类型对应的实例,在显式声明基本包装类型的实例时,new操作符不能省略。
Boolean类型:
Boolean类型时与布尔值对应的引用类型。
创建方式:
1.使用new操作符后跟构造函数创建,new不能省略;
实例方法:
1.valueOf:返回基本类型值true或false;
2.toString:返回基本类型值的字符串形式;
永远不要试图使用Boolean对象:
Number类型:
创建方式:
1.使用new操作符后跟构造函数创建,new不能省略;
实例方法:
1.valueOf:返回基本类型值;
2.toString:返回基本类型值的字符串形式,接收一个参数表示返回的进制;
3.toFix:按照指定的小数位数返回数值的字符串表示,接受一个参数表示返回的小数位数,如果指定位数小于当前位数,将做自动舍入操作(位数范围:0-20);
4.toExponential:按照指定小数位数返回数值的科学计数法的字符串表示,接受一个参数表示返回的小数位数;
5.toPrecision:按照指定位数返回数值的字符串表示,返回固定大小格式,接受一个参数,表示数字的所有数字位数;
String类型:
创建方式:
1.使用new操作符后跟构造函数创建,new不能省略;
实例方法:
1.charAt:接受一个参数,即基于0的字符位置,返回单字符字符串形式的给定位置的字符,缺省返回0位置;
2.charCodeAt:接受一个参数,即基于0的字符位置,返回单字符字符串形式的给定位置的字符编码,缺省返回0位置,
3.[]:直接访问对应下标的值,返回字符字符串表示;
4.concat:拼接一或多个字符串,返回拼接后得到的新字符串,接收任意多个参数;
5.slice:返回新字符串,接收两个参数,第一个参数指定子字符串开始位置,第二个参数指定最后一个字符串的位置,
负值参数会与字符串长度相加;
6.substring:返回新字符串,接收两个参数,第一个参数指定子字符串开始位置,第二个参数指定最后一个字符串的位置,
负值参数会转换为0;
7.substr:返回新字符串,接收两个参数,第一个参数指定子字符串开始位置,第二个参数指定返回的字符串个数,第一个负值参数会与字符串长度相加,第二个负值参数会转换为0;
8.indexOf:返回字符串出现的位置,从前往后查找,接收两个参数,第一个参数指定字符串,第二个参数为开始查找的起始位置;
9.lastIndexOf:返回字符串出现的位置,从后往前查找,接收两个参数,第一个参数指定字符串,第二个参数为开始查找的起始位置;
10.trim:返回新字符串,去除首尾空格;
11.toUpperCase/toLowerCase:返回新字符串,转换大小写;
12.match:接收一个参数,正则表达式或RegExp对象;
13.search:参数与match一致,将返回字符串中第一个匹配项的索引,若无匹配则返回-1;
14.replace:接收两个参数,第一个参数为RegExp对象或字符串,第二个参数为字符串或一个函数,第一参数若为字符串,将只会替换第一个子字符串;
15.split:接收两个个参数,第一个参数指定分隔符将字符串分割成多个子字符串,并将结果放在一个数组中返回,第二个参数指定数组的长度;
16.localeCompare:用于字符串比较,按照字母表顺序,若应在字符串参数之前,返回-1,相等返回0,若应在字符串参数之后,则返回1;
Global对象:
这个对象不存在,ECMAScript中的Global对象在某种意义上时作为一个终极‘兜底儿对象’来定义的。
URI编码方法:
1.encodeURI:对URI(Uniform Resource Identifiers, 通用资源标识符)进行编码,以便发送给浏览器。有效的URI中不能包含某些字符串,比如空格。它使用特殊的UTF-8编码替换所有无效的字符,此方法仅替换URI中的空格。
2.encodeURIComponent:效果与encodeURI相似,此方法会使用对应的编码替换所有非字母数字字符,所以也正是对整个URI使用encodeURI,而只能对附加在URI后面的字符串使用encodeURIComponent的原因所在;
3.eval:接收一个参数,即要执行的JavaScript字符串,代码注入;
4.window:ECMAScript没有指出如何直接访问Global对象,但Web浏览器都是将这个全局对象作为window对象的一部分加以实现的。
Math对象:
对象属性和方法:
1.min和max:确定一组数值中的最大值和最小值,接收任意个参数;
2.舍入方法:ceil向上舍入,floor向下舍入,round标准舍入;
3.random:返回大于等于0小于1的一个随机数;