JavaScript中的引用类型

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方法,支持传入分割符作为参数,将数组转换为字符串(分隔符仅顶层有效);

转换方法


join使用示例

栈方法(LIFO: last-in-first-out):

1.push:接受任意数量参数,逐个加入到数组末尾,返回修改后数组的长度;

2.pop:从数组末尾删除最后一项,并返回删除项;


栈方法(LIFO: last-in-first-out)

队列方法(FIFO:first-in-first-out):

1.shift:从数组头部删除第一项,并返回删除项;

2.unshift:接受任意数量参数,逐个加入到数组头部,返回修改后数组的长度;

队列方法(FIFO:first-in-first-out)

重排序方法:

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之后的文本;


RegExp构造函数属性

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:


example

图中声明了一个s1作为String基本数据类型,不应该有方法;

但在第二行代码访问s1时,访问过程处于一种读取模式,从内存中读取这个字符串的值,后台自动完成了下列操作;

1)创建一个String类型的一个实例;

2)在实例上调用指定的方法;

3)销毁这个实例;


后台执行过程

引用类型与基本包装类型的主要区别就是对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域前都会一直保留在内存中,而自动创建的基本包装类型的实例,则只存在于一行代码的执行瞬间,然后立即被销毁;

允许显式创建基本包装类型的实例,但绝对不要这样做!


自动创建的基本包装类型的实例生存期

Object构造函数也会和工厂函数一样,根据传入值的类型返回一个相应的基本类型对应的实例,在显式声明基本包装类型的实例时,new操作符不能省略。


new操作符必须存在

Boolean类型:

Boolean类型时与布尔值对应的引用类型。

创建方式:

1.使用new操作符后跟构造函数创建,new不能省略;


创建方式

实例方法:

1.valueOf:返回基本类型值true或false;

2.toString:返回基本类型值的字符串形式;

实例方法

永远不要试图使用Boolean对象:


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对象;


match

13.search:参数与match一致,将返回字符串中第一个匹配项的索引,若无匹配则返回-1;

14.replace:接收两个参数,第一个参数为RegExp对象或字符串,第二个参数为字符串或一个函数,第一参数若为字符串,将只会替换第一个子字符串;


replace

15.split:接收两个个参数,第一个参数指定分隔符将字符串分割成多个子字符串,并将结果放在一个数组中返回,第二个参数指定数组的长度;


split

16.localeCompare:用于字符串比较,按照字母表顺序,若应在字符串参数之前,返回-1,相等返回0,若应在字符串参数之后,则返回1;


localeCompare

Global对象:

这个对象不存在,ECMAScript中的Global对象在某种意义上时作为一个终极‘兜底儿对象’来定义的。

URI编码方法:

1.encodeURI:对URI(Uniform Resource Identifiers, 通用资源标识符)进行编码,以便发送给浏览器。有效的URI中不能包含某些字符串,比如空格。它使用特殊的UTF-8编码替换所有无效的字符,此方法仅替换URI中的空格。

2.encodeURIComponent:效果与encodeURI相似,此方法会使用对应的编码替换所有非字母数字字符,所以也正是对整个URI使用encodeURI,而只能对附加在URI后面的字符串使用encodeURIComponent的原因所在;


encodeURI和encodeURIComponent

3.eval:接收一个参数,即要执行的JavaScript字符串,代码注入;

4.window:ECMAScript没有指出如何直接访问Global对象,但Web浏览器都是将这个全局对象作为window对象的一部分加以实现的。

Math对象:

对象属性和方法:

1.min和max:确定一组数值中的最大值和最小值,接收任意个参数;

2.舍入方法:ceil向上舍入,floor向下舍入,round标准舍入;

3.random:返回大于等于0小于1的一个随机数;


对象属性和方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,099评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • 本章内容 使用对象 创建并操作数组 理解基本的 JavaScript 类型 使用基本类型和基本包装类型 引用类型的...
    闷油瓶小张阅读 697评论 0 0
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,162评论 0 21
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,664评论 0 5