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的一个随机数;


对象属性和方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容

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