javascript高级程序设计之引用类型

 

1、概要

引用类型的值(对象)是引用类型的一个实例。在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,也称为类。ECMAScript从技术上讲是一门面向对象的语言,便它不具备传统的面向对象语言所支持的类和接口等基本结构。引用类型有时候也被称为对象定义。

2、Object类型

创建方式有两种,一种是new Object,另外一种是使用对象字面量表示法{key:value,...}形式

属性访问方式有两种,一种是点表示法,另外一种是使用方括号语法,方括号语法的优点是可以通过变量来访问,如果属性名中包含会导致语法错误的字符,或者属性名使用的是关键字或保留字,也可以使用方括号表示法。

3、Array类型

创建方式有两种,一种是使用Array构造函数new Array(),其中new也可以省略

另种一种是使用数组字面量表示法[value1,value2,...]

在读取和设置数组的值时,要使用方括号并提供相应值的基于0的数字索引。如果索引小于数组中的项数,则返回对应项的值。如果设置某个值的索引超过了数组现有项数,会自动增加到该索引。

数组的长度保存在length属性中,始终会返回0或者更大的值。length属性不是只读的,通过设置这个属性,可以从数组的末尾移除项或者向数组中添加新项。

3.1 检测数组

Array.isArray()

3.2 转换方法

方法名 说明 例子
toLocalString() 经常也会返回与toString()和valueOf()相同的值,如果元素是对象,会调用每项的toLocaleString()方法

var person1 = {toLocaleString:funciton() {return "Nikolaos";},

toString:funciton() {

return "Nicholas";

}

};

var person2 = {

     toLocaleString:function() {return "Grigorios";},

toString:function() {

return "Greg";

}

};

var people = [person1, person2];

alert(people.toLocaleString());//Nikolaos,Grigorios

toString() 返回数组中每个值的字符串形式拼接而成的以逗号分隔的字符串  
valueOf() 返回的是数组  

3.3 栈方法

push() 可以接受任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。
pop() 从数组末尾移除最后一项,减少数组的length值,然后返回移除的项

3.4 队列方法

shift() 移除数组中的第一个项并返回该项,同时将数组长度减1
unshift() 与shift()用途相反,能在数组前端添加任意个项并返回新数组的长度。

3.5 重排序方法

reverse() 反转数组项的顺序
sort() 默认情况下按升序排列数组项,sort方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,来确定如何排序。sort()方法可以接收一个比较函数作为参数,来指定哪个值位于哪个值前面。

3.6 操作方法

concat() 基于当前数组中的所有项创建一个新数组。这个方法会新创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新创建的数组。在没有给concat()方法传递参数的情况下,它只是复制当前数组并返回副本。如果传递给concat()方法的是一或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中。如果传递的不是数组,这此值就会被简单地添加到结果数组的末尾。
slice() 基于当前数组中的一或多个项创建一个新数组。可以接受一或两个参数,即要返回项的起始和结束位置,在只有一个参数的情况下,slice()方法返回从该参数指定位置到当前数组末尾的所有项。如果有两个参数,该方法返回起始和结束位置之间的项-但不包括结束位置的项。slice方法不会影响原始数组。
splice()

删除:可以删除任意数量的项,只需指定2个参数:要删除的第一项的位置和要删除的项数

插入:可以向指定位置插入任意数量的项,只需要提供3个参数:起始位置、0(要删除的项数)和要插入的项。

替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。

始终都会返回一个数组,访数组中包含从原始数组中删除的项(如果没有删除任何项,则个空数组)。

3.7 位置方法

indexOf() 两个参数,要查找的项和(可选 的)表示查找起点位置的索引。从数组的开头开始向后查找
lastIndexOf() 两个参数,要查找的项和(可选 的)表示查找起点位置的索引。从数组的末尾开始向前查找

3.8 迭代方法

每个方法都 接收两个参数:要在每一项上运行的函数和(可选 的)运行该函数的作用域对象-影响this的值。传入这些方法中的函数会接收三个参数:数组英的值、该项在数组中的位置和数组对象本身。

every() 对数组中的每一项进行给定函数,如果该函数对每一项都返回true,则返回true
filter() 对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
forEach() 对数组中的每一项运行给定函数。这个方法没有返回值
map() 对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组
some() 对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true.

3.9 缩小方法

会迭代数组的所有项,然后构建一个最终返回的值。reduce()方法从数组的第一项开始,逐个遍历到最后。reduceRight()则从数组的最后一项开始,向前遍历到第一项。

都接收两个参数:一个在每一项上调用 的函数和(可选 的)作为缩小基础的初始值。传递给reduct()和reduceRight()的函数接收4个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上。因此第一个参数是数组的第一项,第二个参数就是数组的第二项。

4、Date类型

使用自UTC1970年1月1日午夜(零时)开始经过的毫秒数来保存日期。

创建一个日期对象,使用new操作符和Date构造函数即可。在调用Date构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。如果想根据特定的日期和时间创建日期对象,必须传入表示该日期的毫秒数。ECMAScript提供了两个方法:Date.parse()和Date.UTC()

Date.parse()方法接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数。通过接受下列日期格式 

  • 月/日/年,如6/13/2004
  • 英文月名 日,年,如January 12, 2004
  • 英文星期几 英文月名 日 年 时:分:秒 时区,如Tue May 25 2004 00:00:00 GMT-0700
  • ISO 8601 扩展格式 YYYY-MM-DDTHH:mm:ss.sssZ,如2004-05-25T00:00:00

如果传入的Date.parse()方法的字符串不能表示日期,那么它会返回NaN。

Date.UT()方法同样也返回表示日期的毫秒数,但它与Date.parse()在构建值时使用不同的信息。Date.UT()的参数分别是年份、基于0的月份(一月是0,二用是1,以此类推)、月中的哪一天(1到31)、小时数(0到23)、分钟、秒以及毫秒数。在这些参数中,只有前两个参数是必须的。如果没有提供月中的天数,则假设天数为1,如果省略其他参数,则统统假设为0.

Date.now()方法表示调用这个方法的日期和时间的毫秒数。

4.1 继承的方法

toLocaleString() 按照与浏览器设置的时区相适应的格式返回日期和时间
toString() 返回带有时区信息的日期和时间。
valueOf() 返回日期的毫秒表示

4.2 日期格式化方法

toDateString() 以特定于实现的格式显示星期几、月、日和年
toTimeString() 以特定于实现的格式显示时、分、秒和时区
toLocaleDateString() 以特定于地区的格式显示星期几、月、日和年
toLocaleTimeString() 以特定于实现的格式显示时、分、秒
toUTCString() 以特定于实现的格式完整的UTC日期

4.3 日期/时间组件方法

getTime() 返回表示日期的毫秒数
setTime(毫秒) 以毫秒数设置日期
getFullYear() 取得4位数的年份
getUTCFullYear() 返回UTC日期的4位数年份
setFullYear(年) 设置日期的年份,传入的年份值必须是4位数字
setUTCFullYear(年) 设置UTC日期的年份,传入的年份值必须是4位数字
getMonth() 返回日期中的月份,其中0表示1月,11表示十二月
getUTCMonth() 返回UTC日期中的月份,其中0表示1月,11表示十二月
setMonth(月) 设置日期的月份,传入的月份值必须大于0,超过11则增加年份
setUTCMonth(月) 设置UTC日期的月份,传入的月份值必须大于0,超过11则增加年份
getDate() 返回日期月份中的天数(1到31)
getUTCDate() 返回UTC日期月份中的天数(1到31)
setDate(日) 设置日期月份中的天数,如果传入的值超过了该月中应有的天数,则增加月份
setUTCDate(日) 设置UTC日期月份中的天数,如果传入的值超过了该月中应有的天数,则增加月份
getDay() 返回日期中星期的星期几(其中0表示星期日,6表示星期六)
getUTCDay() 返回UTC日期中星期的星期几(其中0表示星期日,6表示星期六)
getHours() 返回日期中的小时数(0到23)
getUTCHours() 返回UTC日期中的小时数(0到23)
setHours(时) 设置日期中的小时数,传入的值超过了23则增加月份中的天数
setUTCHours(时) 设置UTC日期中的小时数,传入的值超过了23则增加月份中的天数
getMinutes() 返回日期中的分钟数(0到59)
getUTCMinutes() 返回UTC日期中的分钟数(0到59)
setMinutes(分) 设置日期中的分钟数,传入的值超过59则增加小时数
setUTCMinutes(分) 设置UTC日期中的分钟数,传入的值超过59则增加小时数
getSeconds() 返回日期中的秒数(0到59)
getUTCSeconds() 返回UTC日期中的秒数(0到59)
setSeconds(秒) 设置日期中的秒数,传入的值超过59则增加分钟数
setUTCSeconds(秒) 设置UTC日期中的秒数,传入的值超过59则增加分钟数
getMilliseconds() 返回日期中的毫秒数
getUTCMilliseconds() 返回UTC日期中的毫秒数
setMilliseconds(毫秒) 设置日期中的毫秒数
setUTCMilliseconds(毫秒) 设置UTC日期中的毫秒数
getTimezoneOffset() 返回本地时间与UTC时间相差的分钟数。

5、RegExp类型

正则表达式创建

var expression = /pattern/flags;

flags标志:

  • g:表示全局模式。即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止 
  • i:表示不区分大小写模式,即在确定匹配项时忽略模式与字符串的大小写
  • m:表示多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。

另外一种创建正则表达式的方式是使用RegExp构造函数,接收两个参数:一个是要匹配的字符串模式,另一个是可选的标志字符串。可以使用字面量定义的任何表达式,都可以使用构造函数来定义。

5.1 RegExp实例属性

global 布尔值,表示是否设置了g标志
ignoreCase 布尔值,表示是否设置了i标志
lastIndex 整数,表示开始搜索下一个匹配项的字符位置,从0算起
multiline 布尔值,表示是否设置了m标志
source 正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。

5.2 RegExp实例方法

exec()

接受一个参数,返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null。返回的数组包含两个额外的属性:index和input。其中index表示匹配项在字符串中的位置,input表示应用正则表达式的字符串。在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串。

对于exec()方法而言,即使在模式中设置了全局标志(g),它每次也只会返回一个匹配项。在不设置全局标志的情况下,在同一个字符串上多次调用 exec()将始终返回第一个匹配项的信息。而在设置全局标志的情况下,每次调用 exec()则都会在字符串中继续查找新匹配项。

test() 接受一个字符串参数。在模式与该参数匹配的情况下返回true,否则返回false.在只想知道目标字符串与某个模式是否匹配,但不需要知道其文本内容的情况下,使用这个方法非常方便。

5.3 RegExp构造函数属性

长属性名 短属性名 说明
input $_ 最近一次要匹配的字符串
lastMatch $& 最近一次的匹配项
lastParen $+ 最近一次匹配的捕获组
leftContext $` input字符串中lastMatch之前的文本
multiline $* 布尔值,表示是否所有表达式都使用多行模式
rightContext $' Input字符串中lastMatch之后的文本

6、Function类型

三种定义方式

函数声明语法定义

function funName(var1, var2)  {

}

函数表达式定义

var funName = function(var1,var2) {

};

Function构造函数定义

var funName = new Function("var1", "var2", "funbody");

6.1 没有重载

函数名作为指针

6.2 函数声明与函数表达式

解析器会率先读取函数声明,并使其在执行任何代码之前可用。至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。

6.3 作为值的函数

函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不仅可以像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。

6.4 函数内部属性

arguments和this

arguments的主要用途是保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。

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

另一个函数对象的属性:caller。这个属性中保存着调用当前函数的函数的引用。如果是在全局作用域中调用当前函数,它的值是null.

6.5 函数属性和方法

每个函数都包含两个属性:length和prototype。length属性表示函数希望接收的命名参数的个数。

方法apply()和call()。这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。

apply()方法接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组。其中第二个参数可以是Array的实例,也可以是arguments对象。

call()方法与apply()方法的作用相同,区别仅在于接收参数的方式不同。第一个参数是this值没有变化,变化的是其余参数都直接传递给函数。

7、基本包装类型

7.1 Boolean类型

是与布尔值对应的引用类型。创建方式new Boolean(布尔值)

7.2 Number类型

与数字值对应的引用类型,创建方式new Number(数值)

toFixed() 接收一个参数,显示几位小数 
toExponential() 返回以指数表示法表示的数值的字符串形式,接收一个参数,指定输出结果中的小数位数
toPrecision() 可能返回固定大小格式,也可能返回指数格式。接收一个参数,即表示数值的所有数字的位数(不包括指数部分)

7.3 String类型

字符方法

charAt() 接收一个参数,以单字符字符串的形式返回指定位置的字符
charCodeAt() 接收一个参数,返回字符编码

字体串操作方法

concat() 用于将一或多个字符串拼接起来,返回拼接得到的新字符串
slice() 第一个参数指定子字符串的开始位置,第二个参数(可选 )指定的是子字符串最后一个字符后面的位置。不会修改原字符串。传递的参数为负值时, 会将传入的负值与字符串的长度相加
substr() 第一个参数指定子字符串的开始位置,第二个参数(可选 )指定的则是返回的字符个数。不会修改原字符串。传递的参数为负值时, 会将负的第一个参数加上字符串的长度,负的第二个参数转换为0
substring() 第一个参数指定子字符串的开始位置,第二个参数(可选 )指定的是子字符串最后一个字符后面的位置。不会修改原字符串。传递的参数为负值时,会将所有的负值参数都转换为0

字符串位置方法

都是从一个字符串中搜索给定的子字符串,然后返子字符串的位置(如果没有找到该子字符串,则返回-1)。

都可以接收可选 的第二个参数,表示从字符串中的哪个位置开始搜索。

indexOf() 从字符串的开头向后搜索子字符串
lastIndexOf() 从字符串的末尾向前搜索子字符串

trim()方法

会创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果。

字符串大小写转换方法

toLowerCase()  
toLocaleLowerCase() 针对特定地区的实现。对有些地区来说,针对地区的方法与其通用方法得到的结果相同,但少数语言会为unicode大小写转换应用特殊的规则,这时候就必须使用针对地区的方法来保证实现正确的转换。
toUpperCase()  
toLocaleUpperCase() 针对特定地区的实现。对有些地区来说,针对地区的方法与其通用方法得到的结果相同,但少数语言会为unicode大小写转换应用特殊的规则,这时候就必须使用针对地区的方法来保证实现正确的转换。

字符串的模式匹配方法

match() 只接受一个参数,要么是一个正则表达式,要么是一个RegExp对象
search() 唯一参数与match()方法的参数相同,由字符串或RegExp对象指定的一个正则表达式,返回字符串中第一个匹配的索引。没有找到匹配项,返回-1
replace() 接受两个参数,第一个参数可以是一个RexExp对象或者一个字符串(这个字符串不会被转换成正则表达式),第二个参数可以是一个字符串或者一个函数。如果第一个参数是字符串,那么只会替换第一个子字符串。要想替换所有子字符串,唯一的办法就是提供一个正则表达式,而且要指定全局(g)标志。
split() 基于指定的分隔符将一个字符串分割成多个子字符串,并将结果放在一个数组中。分隔符可以是字符串,也可以是一个RegExp对象。可以接受可选 的第二个参数,用于指定数组的大小,以确保返回的数组不会超过既定大小。

localeCompare()方法

比较两个字符串,并返回下列值中的一个:

  • 如果字符串在字母表中应该排在字符串参数之前,则返回一个负数。
  • 如果字符串等于字符串参数,则返回0
  • 如果字符串在字母表中应该排在字符串参数之后,则返回一个正数。

fromCharCode()方法

是静态方法,接收一或多个字符编码,然后将它们转换成一个字符串。

html方法

应该尽量不使用这些方法,因为它们创建的标记通常无法表达语义

anchor(name) <a name="name">string</a>
big() <big>string</big>
bold() <b>string</b>
fixed() <tt>string</tt>
fontcolor(color) <font color="color">string</font>
fontsize(size) <font size="size">string</font>
italics()

<i>string</i>

link(url) <a href="url">string</a>
small() <small>string</small>
strike() <strike>string</strike>
sub() <sub>string</sub>
sup() <sup>string</sup>

8、单体内置对象

8.1 Global对象

所有在全局作用域中定义的属性和函数,都是Global对象的属性。

(1)URI编码方法

encodeURI()和encodeURIComponent()方法可以对URI进行编码。encodeURI()不会对本身属于URI的特殊字符进行编码,例如冒号、正斜柳杠、问号和井字号。而encodeURIComponent()则会对它发现的任何非标准字符进行编码。

与encodeURI()和encodeURIComponent()方法对应的两个方法分别是decodeURI()和decodeURIComponent()

(2)eval()方法

只接受一个参数,即要执行的ECMAScript字符串。

(3)Global对象的属性

undefined,NaN以及Infinity都是Global对象的属性

undefined 特殊值undefined
NaN 特殊值NaN
Infinity 特殊值Infinity
Object 构造函数Object
Array 构造函数Array
Function 构造函数Function
Boolean 构造函数Boolean
String 构造函数String
Number 构造函数Number
Date 构造函数Date
RegExp 构造函数RegExp
Error 构造函数Error
EvalError 构造函数EvalError
RangeError 构造函数RangeError
ReferenceError 构造函数ReferenceError
SyntaxError 构造函数SyntaxError
TypeError 构造函数TypeError
URIError 构造函数URIError

(4)window对象

web浏览器将这个全局对象作为window对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,都成为了window对象的属性。

8.2 Math对象

Math.E 自然对数的底数,即常量e的值
Math.LN10 10的自然对数
Math.LN2 2的自然对数
Math.LOG2E 以2为底e的对数
Math.LOG10E 以10为底e的对数
Math.PI \pi的值
Math.SQRT1_2 1/2的平方根
Math.SQRT2 2的平方根
Math.min(num,...) 确定一组数值中的最小值
Math.max(num,...) 确定一组数值中的最大值
Math.ceil(num) 执行向上舍入,即它总是将数值向上舍入为最接近的整数
Math.floor(num) 执行向下舍入,即它总是将数值向下舍入为最接近的整数
Math.round(num) 执行标准舍入,即它总是将数值四舍五入为最接近的整数
Math.random() 返回介于0和1之间一个随机数,不包括0和1
Math.abs(num) 返回num的绝对值
Math.exp(num) 返回Math.E的num次幂
Math.log(num) 返回num的自然对数
Math.pow(num, power) 返回num的power次幂
Math.sqrt(num)

返回num的平方根

Math.acos(x) 返回x的反余弦值
Math.asin(x)

返回x的反正弦值

Math.atan(x)

返回x的反正切值

Math.atan2(y,x) 返回y/x的反正切值
Math.cos(x) 返回x的余弦值
Math.sin(x) 返回x的正弦值
Math.tan(x) 返回x的正切值

猜你喜欢

转载自blog.csdn.net/wuli2496/article/details/114462080