JS引用类型
引用类型的值(对象)是引用类型的一个实例。在JS中,引用类型是一种数据结构,用于将数据和功能组织在一起。在其它面向对象语言中常被成为类,但在JS中,由于不具备传统面向对象语言所支持的类和接口等基本结构,所以称其为引用类型更合适。
一、Object类型
1. 创建:var a = new object(); 或 var a = {x:"x", y:"y"}; 或 var a = {};
二、Array类型
1. 创建:var myArray1 = new Array(); 或 var myArray2 = [1, 2, 3]
2. 读取:下表索引法
3. 实例属性:length返回数组项数(可读可写)
4. 方法:
(1)检测数组:Array.isArray()方法,传入被检测对象作参数
(2)转换方法:toLocaleString()、toString()、valueOf()
(3)栈方法:push()、pop()
(4)队列方法:push()、shift()
(5)重排序方法:reverse()、sort()
(6)操作方法:concat()、slice()、splice()
(7)位置方法:indexOf()、lastIndexOf()
(8)迭代方法:every()、filter()、forEach()、map()、some()
(9)归并方法:reduce()、reduceRight()
三、Date类型
1. 创建:var now = newDate()
(1)无参数传入时新创建的对象自动获得当前日期时间;
(2)如果想创建指定日期,必须传入该日期的毫秒数。为简化这一过程,有两个方法根据指定日期返回毫秒数:1)Date.parse() :接收一个表示日期的字符串参数。 2)Date.UTC():接受若干参数,即年、月(基于0)、日、时、分、秒,如果省略其他参数,则默认为0。
2. 方法:
(1)转换方法:toLocaleString()、toString()、valueOf()
(2)日期格式化方法:toDateString()、toTimeString()、toLocaleDateString()、toLocaleTimeString()、toUTCString()
(3)日期/时间组件方法:直接取得和设置日期值中特定部分的方法
四、RegExp类型
1. 创建:
(1)方式一:var pattern1 = / pattern / flags
(2)方式二:var pattern2 = new RegExp("pattern", "flags")
其中,pattern部分为正则表达式,flags部分为匹配模式(包括g全局、i不区分大小写、m多行)。
2. 实例属性:global、ignoreCase、lastIndex(下一个匹配项的字符位置,从0算起)、multiline、source(返回正则表达式字符串表示,按字面量形式)
3. 实例方法:
(1)exec():接收要应用模式的字符串,然后返回一个匹配信息的数组,匹配失败则返回null。返回的数组第一项是整个模式匹配的字符串,其他项是与模式中捕获组匹配的字符串,另外还包含两个属性:index表示匹配项在字符串中的位置,input表示应用正则表达式的字符串。
是否设置g标志对exec()的影响:对exec()方法而言,每次只会返回一个匹配项,但如果设置了g标志,则每次匹配都会从上次匹配成功的位置开始(lastIndex属性增加),如果未设置g标志,就只能匹配第一项。
(2)test():接收要应用模式的字符串,匹配成功返回true,匹配失败返回false。
(3)toLocaleString()、toString():返回正则表达式的字面量
valueOf():返回正则表达式本身
4.构造函数属性(静态属性):
基于所执行的最近一次正则表达式操作而变化。每个属性有两种访问方式,长属性名和短属性名。
长属性名 | 短属性名 | 说明 |
input | $_ | 最近一次要匹配的字符串 |
lastMatch | $& | 最近一次的匹配项 |
lastParen | $+ | 最近一次匹配的捕获组 |
leftContext | $` |
input字符串中lastMatch之前的文本 |
multiline | $* | 布尔值,表示是否所有表达式都使用多行模式 |
rightContext | $' | Input字符串中lastMatch之后的文本 |
五、Function类型
函数是对象,函数名是指针。
1. 创建:函数声明语法function func(args) {statements return;} 等价于 var func = function(args) {statements return;} 或者 var func = new Function("args","return ... ");
2. 函数声明和函数表达式的区别:函数声明会被解析器率先读取,函数表达式必须等到解析器执行到它所在的代码行。这会影响什么时候可以通过变量访问函数。
3. 函数可以作为值来使用,即可传入函数名做参数,也可返回函数。
4. 函数内部属性:函数内部有两个特殊的对象——arguments和this。其中arguments保存函数参数(arguments.callee是一个指针,指向拥有这个arguments对象的函数),this引用的是函数执行的环境对象。
5. 函数属性:length表示函数希望接收的命名参数的个数,prototype保存函数所有实例方法(不可枚举)。
6. 函数方法:apply()、call(),这两个方法在特定的作用域调用函数,实际上等于设置函数体内this对象的值。区别于参数而不同,第一个参数都是在其中运行函数的作用域,但apply()第二个参数为参数数组,call()明确传入每一个参数。它们真正的强大之处是能够扩充函数赖以生存的作用域。
六、基本包装类型
1. 3个基本包装类型:Boolean、Number、String对应各自的基本类型值,每当读取一个基本类型值是,后台会自动创建一个对应的基本包装类型的对象,并在当行代码执行结束后销毁这个实例对象。
2. 显式地创建基本包装类型的对象(不常用):var obj = new Number("25");
3. Boolean类型:注意区分基本类型的布尔值与Boolean对象之间的区别——一个是基本类型值,一个是对象。
4. Number类型:valueOf()、toLocaleString()和toString()、toFixed()、toExponential()、toPrecision()
5. String类型:length属性、charAt()、concat()、slice()、substring()、indaexOf()、lastIndex()、trim()、toLowerCase()、toUpperCase()、match()、search()、repalce()、split()、localeCompare()、fromCharCode()
七、单体内置对象
在程序执行前就已经存在了的对象。
1. Global对象
(1)eval()方法:用来解析参数代码字符串
2. Window对象
3. Math对象
(1)属性:多是一些数学计算的特殊值。包括E、LN10、LN2、LOG2E、LOG10E、PI、SQRT1_2(1/2的平方根)、SQRT2
(2)方法:min()和max()、ceil()、floor()、round()、random()等