在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,描述的是一类对象所具有的属性和方法。而对象是某个特定引用类型的实例。

一、Object类型

可以通过Object构造函数创建一个创建Object实例,但常用方式是使用对象字面量表示法,这种方式可以简化创建包含大量属性的对象的过程,需要注意的是数值属性名会自动转换为字符串。

访问对象属性有两种方法:点表示法方括号表示法。方括号的优点体现在1.可以通过变量来访问属性、2.如果属性名包括导致语法错误的字符或者保留字以及关键字,点表示法不太合适。但是一般建议使用点表示法访问对象的属性。

二、Array类型

ECMAScript数组的每一项可以保存任何类型的数据,而且数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新的数据。

同Object类型可以通过Object构造函数创建一个Object对象实例,我们也可以通过Array构造函数创建数组。也可以通过数组字面量表示法创建。

访问数组的元素时可以通过索引访问,索引从0开始。如果要改变数组的元素也可以通过索引设置。通过数组的length属性可以动态改变数组的大小。数组的最大长度是2的32次方-1.

检测数组的方法:Array.isArray(value)。

1.转换方法

数组继承的toLocaleString()、toString()、valueOf()方法,在默认情况下都会以逗号分隔的字符返回所有数组的元素。alert数组名也可以输出数组的所有的数组项,但是这一操作还是调用了数组的toString()方法。

数组的join()方法重现了toString()方法,但是它还可以改变分隔符。

2.栈方法

pop()方法:移出数组的最后一项,返回删除项

push()方法:添加某变量到数组的末尾,返回新数组的长度

3.队列方法

shift()方法:移出数组的第一项,返回删除项

unshift()方法:添加某变量到数组的开头,返回新数组的长度

4.重排序方法

reverse()方法:将数组反序

sort()方法:按升序排列数组项,(机制是调用每个数组项的toString()方法,然后比较进行排序),此方法可以接收一个函数(称为比较函数),比较函数可以通过一个<0、>0或者=0的值来影响排序的结果。

上述两种方法均返回新数组。

5.操作方法

concat()方法:基于当前数组的所有项创建一个新数组,此外,这个方法还可以用于引用类型数组类型的深拷贝,就是拷贝后的数组与原来的数组完全独立。

slice()方法:能够基于当前数组中的一或多个项创建一个新数组,其操作不影响原数组。接收两个参数,表示起始和结束(不包括结束位置的项),若参数为一个,则结束默认到数组最后一位。该方法主要用于向数组的中部插入项,同时也可以利用此方法对数组                                    进行删除、插入或者替换等操作。

splice()方法:用于截取数组,返回一个截取下来的数组。这个方法会改变原数组。

6.位置方法

indexOf()和lastIndexOf()方法,查找时是使用全等操作符比较。

7.迭代方法

ECMAScript5定义了5种迭代方法,且这5种方法不会改变原数组。

every():对数组的每一项运行函数,如果该函数对每一项都返回true,则该方法返回true。

filter():对数组中的每一项运行函数,返回由该函数会返回true的项组成的数组。

forEach:本质上与使用for循环迭代数组一样,没有返回值。

map:对数组中的每一项运行函数,返回由函数返回结果组成的数组。

some:对数组中的每一项运行函数,若函数对任意一项返回true,则返回true。

8.归并方法

reduce()方法和reduceRight()方法,迭代数组,接收四个参数:前一项、后一项、索引、数组对象

三、Date类型

日期类型在实际生产开发中很常用。mark几个概念。默认从1970年1月1日零时开始计算。

Date.parse()方法:接收一个表示日期的字符串参数,返回该日期到默认的毫秒数

Date.UTC()方法:返回结果同Date.parse()方法,它接收的参数分别是年月日时分秒毫秒,年月是必须的参数。

Date.now()方法:返回表示调用这个方法时的日期和时间的毫秒数。如果浏览器不支持该方法,可以利用+操作符,即+Date.now()

关于Date类型的方法,书上介绍很详细,有很多,可以参考JS红宝书P100-P102

四、RegExp类型

即正则表达式、俗称火星文。初学JS,我是拒绝学习这个的,但是实际开发中,由于数据的复杂性,也遇到很多需要利用正则的地方。

模式+标志:模式由元字符组成,包括:([{\^$|)?*+.]}  标志包括:g(全局)、i(不区分大小写)、m(多行模式)

五、Function类型

JS中每个函数都是Function类型的实例,作为引用类型同样具有属性和方法。函数名可以看做是一个指向函数对象的指针。注意:使用不带圆括号的函数名是访问函数指针,而非调用函数。

1.函数声明与函数表达式

解析器在向执行环境中加载数据时,会率先读取函数声明,并使其在执行任何代码之前可以访问。而对于函数表达式,则必须等到解析器执行到函数表达式所在的位置,它才会被解释执行。

2.函数作为值

在JS中,函数名本身是变量,因此,函数可以作为值使用。这一点在回调函数callBack中经常使用到。

3.函数内部属性

arguments:类数组对象,包含传入函数中的所有参数,其属性callee是一个指针,指向包含这个arguments对象的函数。

this:它引用的是函数据以执行的环境对象。

caller:保存着调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,则其值为null。另外,其不能被赋值。

4.函数属性和方法

length:表示函数希望接收的命名参数的个数。

prototype:保存ECMAScript中引用类型的所有实例方法。

函数的方法主要包括apply()和call(),它们二者的区别就是传参的方式不同。前者接收一个运行函数的作用域和一个参数数组;后者的第二个参数则需要注意列举参数。它们的主要作用是改变函数赖以运行的作用域。

六、基本包装类型

基本包装类型的存在意义就是为了便于操作基本类型值,在ECMAScript中,基本包装类型主要包括:Boolean、Number、String。

引用类型和基本包装类型的主要区别是对象的生存期不同。由于这个区别,不能给基本包装类型值添加属性和方法。

1.Number类型

toFixed():指定保留几位小数

toExponential():指数表示法

toPrecision():指定有效数字的位数

2.String类型

鉴于String类型的许多方法与Array类型的方法有很多相似的,所以就不详细介绍了,前面也有一篇关于JS字符串方法的归纳总结:JS字符串方法

七、单体内置对象

(1)Global对象

不属于任何其他对象的属性和方法,最终都属于它的属性和方法。

1.URI编码方法

encodeURI():主要用于整个URI,只对空格进行编码替换

encodeURIComponent():主要用于对URI中的某一片段进行编码,对所有非字母数字字符进行编码替换

对应的解码方法:decodeURI()和decodeURIComponent()

2.eval()方法

eval()方法不推荐使用,因为容易引起恶意用户的代码注入。lue。

3.Global对象的属性

见JS红宝书P133表格

4.window对象

全局对象以访问window对象实现。

(2)Math对象

Math对象的方法十分强大和实用。

常用的如下:

min()和max()方法:确定一组数值中的最小值和最大值

Math.ceil():向上舍入

Math.floor():向下舍入

Math.round():四舍五入

Math.random():返回大于等于0小于1的一个随机数。求区间[min,max]的随机数:Math.random()*max+min

Math.abs():返回绝对值

Math.sqrt():求平方根

第5章 引用类型---JS红宝书书摘系列笔记的更多相关文章

  1. 第4章 变量、作用域和内存---JS红宝书书摘系列笔记

    一.基本类型和引用类型 ECMAScipt变量可能分为两种数据类型:基本类型和引用类型. 基本类型:指简单的数据段:包括Undefined.Null.Boolean.Number.String:可以操 ...

  2. js红宝书学习笔记(一)引用类型

    一.引用类型 ECMAScript中,引用类型是一种数据结构称之为对象定义,,引用对象不同于传统面向对象语言所支持的类和接口等基本结构 创建Object 实例的两种方式: new操作符跟Object构 ...

  3. JS红宝书笔记——第一章 JavaScript简介

    1.JavaScript简史 Netscape公司决定开发一种客户端语言用来处理浏览器端简单的表单验证. Netscape公司派布兰登·艾奇(BrendanEich)为计划于1995年2月发布的Net ...

  4. [转] VS2015中跑OpenGL红宝书第八版的第一章示例代码,运行

    Ori Article Link OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资 ...

  5. VS2015中跑OpenGL红宝书第八版的示例代码

    OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资料终于跑起来了,记录一下 一.环境 ...

  6. 【转载】关于在vs2013中配置opengl红宝书第八版环境

     本文为转载 原文地址 http://blog.csdn.net/qq821869798/article/details/45247241 本人刚开始学习opengl,买了一本opengl红宝书第八版 ...

  7. 从今日起,我会把OpenGL红宝书上的例子用完整的代码形式写在我的博客中,

    1.使用教程:OpenGL红宝书第8版 2.使用的库工具:GLEW和GLFW 3.使用的IDE:vs2012 4.说说目的:完整的看一遍OpenGL,加深印象并且熟练掌握运用OpenGL 5.欢迎有相 ...

  8. OpenGl编程指南第7版(红宝书)环境配制

    环境 OS:win7 旗舰版SP1 64位 编译器: VS 2013 express 的cl 软件 glut. 在这个页面https://www.opengl.org/resources/librar ...

  9. 运行OpenGL红宝书第9版源码时Visual Studio提示“无法启动程序...ALL_BUILD。拒绝访问“的问题的解决办法

    问题描述: OpenGL红宝书第9版源码采用CMake编译后,用相应的Visual Studio(如VS2012)打开“vermilion9.sln”解决方案,并运行时Visual Studio提示“ ...

随机推荐

  1. Tutte矩阵求一般图最大匹配

    [集训队2017论文集] 一张无向图的Tutte矩阵为 其中xi,j为一个random的值. Tutte矩阵的秩(一定为偶数)/2 就是这张图的最大匹配. 原理大概就是: 一个图有完美匹配,则det( ...

  2. shiro加密简单实现

    1.添加shiro依赖 定义shiro的版本号 <shiro.ver>1.2.3</shiro.ver> 加入shiro的依赖 <dependency> <g ...

  3. darknet源码学习

    darknet是一个较为轻型的完全基于C与CUDA的开源深度学习框架,其主要特点就是容易安装,没有任何依赖项(OpenCV都可以不用),移植性非常好,支持CPU与GPU两种计算方式.1.test源码( ...

  4. JavaScript DOM 编程艺术 ---> JavaScript语法

    二.  JavaScript语法目录 2.1 语法 javaScript代码要通过HTML/XHTML文档才能执行.可以有两种方式完成这一点,第一种是将JavaScript代码放到文档<head ...

  5. Maven下org.junit.Test无法使用

    原文地址: https://blog.csdn.net/allenChenZhiMing/article/details/81412983 我在看Spring in action(第四版)的时候,看到 ...

  6. glance image-create --name "linux-core-mini-01" --file /cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --progress --visibility public

    glance image-create --name "linux-core-mini-01" --file /cirros-0.3.4-x86_64-disk.img --dis ...

  7. js的call()通俗解释

    var x = "我是全局变量"; //定义全局变量x function a(){ //定义函数类结构a this.x = "我是在函数类结构a中声明的哦"; ...

  8. Ubuntu16.04 安装Python3.6 报错

    问题: 在安装Python 3.6,执行make install 时出现以下错误: zipimport.ZipImportError: can't decompress data; zlib not ...

  9. C#基础:线程之异步回调(委托)

    异步回调,什么是异步回调?我是这样理解的,当主线程在执行一段代码的时候,我们用委托执行了一个线程,这个线程要返回一个结果,关键是什么时候返回这个结果,异步回调就是在这个线程执行完成后立即返回这个线程的 ...

  10. SqlServer2012——表

    1.数据类型 数字类型:int,smallint, 高精度:decimal,numeric 日期和时间:datetime,smalldatetime 二进制:binary,varbinary,imag ...