引用类型的值(对象)是引用类型的一个实例,引用类型是一种数据结构,用于将数据和功能组织在一起。它也长被称为类。有时也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。
对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数来创建的。
1)object类型
创建object实例的方式有两种,第一种是使用new操作符后跟object构造函数。
另一种方式是使用对象字面量表示法,对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。
使用对象字面量法时,属性名也可以使用字符串。如果留空其花括号,则可以定义只包含默认属性的方法和对象。
访问对象属性时一般使用点表示法,也可以使用方括号来访问对象属性,在使用方括号时候应该讲要访问的属性义字符串的形式放在方括号中。方括号语法的主要优点是可以通过变量来访问属性。除非必须要使用变量来访问属性,其他时候建议用点表示法。
2)Array类型
创建数组的基本方式有两种,第一种是使用Array构造函数,另一种使用数组字面表示法。
length属性:数组的项数保存 返回值始终返回0或者更大的值
length特点:不是只读的 可以从数组的末尾端移除或者想数组中添加新项
检测数组
instanceof操作符 确定某个对象是不是数组
Array.isArray() 这个方法的目的是最终过去定某个值到底是不是数组,而不管
他是在哪个全局执行环境中创建
转换方法
所有对象都具有 toLocaleString() toString() 和 valueOf()方法
调用valueOf() 方法 返回的是数组本身
调用toString()方法 返回的是由数组中每个值得字符串形式拼接而成的一个以逗号分割的字符串
join()方法 只接收一个参数,即用作分隔符的字符串,然后返回包含所有数组的字符串。
栈方法
栈是一种“后进先出”数据结构也就是最新添加的数据项最早被删除的项,而栈中的插入(叫推入)和移除(叫弹出),只发生在一个位置——栈的顶部 。push()和pop方法实现类似栈的行为。
push()方法可以接收任意数量的参数,把他们逐个添加到末尾,并返回修改后数组的长度
pop()方法则从数组末尾移除最后一项,减少数组length值,饭后返回移除的项。
队列方法
队列数据结构的访问规则是FIFO(先进先出),队列在列表的末端添加项,从列表的前端移除项。
shift() 方法取第一项并返回
unshift()方法 在数据前推入
重排序方法
数组中可以直接用来排序的方法 reverse() 和 sort() 返回值是经过排序之后的数组
reversr()方法 翻转数组的顺序
sort() 方法按升序排列数组项 sort()会调用toString()转型方法 比较的也是字符串
操作方法
concat()方法可以基于当前数组中所有项创建一个新数组 相当于创建了一个副本
slice()方法 它能够基于当前数组中的一个或多个项创建一个新数组,可以接受一个或两个参数,即要返回项的起始和结束位置。
splice()方法 多种用法 删除:可以删除任意数量的项,只需要指定两个参数:要删除的第一项的位置和要删除的项数 插入:可以向指定位置插入任意数量的项数,只需要提供三个参数:起始位置、要删除的项数和要插入的项。如果要插入多个项,可以在传入第四、第五任意多个项 替换:可以指定位置插入任意数量的项,且同时删除任意数量的项,只需要指定3个参数:起始位置、要删除的项数、和要插入的任意数量的项数。
位置方法
位置方法 indexOf()和lastIndexOf() 这两个方法都接收两个参数:要查找的项和(可选的)表示查找七点位置的索引。其中indexOf()方法从数组的开通开始象后查找,lastIndexOf()则从数组的末尾端向前查找。
迭代方法
every() filter() forEach() map() some()
归并方法
reduce() reduceRight() 这两个方法都会迭代数组所有的项 都接收两个参数:一个在每一项上调用函数和(可选的)作为归并基础的初始值,传给reduce()幻术和reduceRghti()的函数接收4个参数:前一个值、当前值、项索引和数组对象。这个函数返回的任何值都会作为参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数是数组的第二项。
3)Date 类型
要创建一个日期对象,使用new操作符和Date构造函数即可。在调用Date构造函数而不传递参数的情况下,新创建的对象自动获取当前日期和时间。
Date.parse() 方法只接受一个表示日期的字符串参数,然后根据这个字符串返回响应日期的毫秒数,如果Date.parse()方法的字符串不能表示日期,那么他会返回NaN。
Date.UTC() 方法同样也返回表示日期的毫秒数
Date.now() 方法返回表示调用这个方法时的日期和时间的毫秒数
继承方法
Date类型的toLocaleString()方法会按照与浏览器设置的地区相适应的格式返回日期和时间
toString() 方法则通常返回带有实区信息的日期和时间
Date 类型的valueOf() 方法,则根本不返回字符串,而是返回日期的毫秒表示
日期格式化方法
toDateString() 以特定于实现的格式显示星期几、月、日、和年
toTimeString() 以特定于实现各格式显示时、分、秒和时区
toLocaleDateString() 以特定于地区的格式显示星期几、月、日、和年
toLocaleTimeString() 以特定于地区的格式显示时、分、秒
toUTCString() 以特定于实现的格式显示UTC 日期
4)RegExp类型
ECMAScript 通过RegExp类型来支持正则表达式,使用下面类型perl的语法,就可以穿件一个正则表达式。 var expression = /pattern / flags 其中的模式(pattern)可以是任何简单或复杂的正则表达式,可以包含字符类、限定符、分组向前查找以及反向引用。每个正则表达式都可以带有一个或多个表示(flags),用以标明正则表达式的行为,支持3各标志
g:表示全局(global)模式
i:表示不区分大小写模式
m:表示多行模式
与其他语言中的正则表达式类似,模式中使用的所有元字符必须转义。
RegExp实例属性
global:布尔值,表示是否设置了g标志
ignoreCase:布尔值,表示是否设置了i标志
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起
multiline:布尔值,表示是否设置了m标志
source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回
RegExp实例方法
exec() 捕获组 接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组 包含两个额外属性 index 和 input index 表示匹配项在字符串中的位置 input 表示应用正则表达式的字符串。
test() 接受一个字符串参数,在模式与该参数匹配的情况下返回true 否则返回false
正则表达式的valueOf()方法返回正则表达式本身
RegExp构造函数属性
input 短属性名 $_ 最近一次要匹配的字符串 返回原始字符串
lastMatch $& 最近一次的匹配项 返回最近一次与整个正则表达式匹配的字符串
lastParen $+ 最近一次匹配的捕获组 返回最近一次匹配的捕获组
multiline $* 布尔值,表示是否所有表达式都使用了多行模式
rightContext $' input 字符串中lastMatch之后的文本
5) Function 类型
每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法
“函数是对象,函数名是指针” 使用不带圆括号的函数名是访问函数指针,而非调用函数
没有重载
函数声明与函数表达式
解析器再像执行环境中加载数据是,对函数声明和函数表达式并非一视同仁,解析器会率先读取函数声明,并非其在执行任何代码之前可用;至于函数表达式,则必须等到解析器执行到他所在的代码行才会真正的被解释执行。
作为值得函数
因为ECMAScript 中函数名本身就是变量,所以函数也可以作为值来使用,也就是说不仅可以向传递参数一样吧一个幻术传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。
函数的内部属性
在函数的内部,有两个特殊的对象 arguments 和 this
arguments 主要用途保存函数参数,还有个属性callee 该属性是一个指针,指向拥有这个arguments对象的函数
this 引用的是函数执行的环境对象 或者也可以说是this值(当在网页的全局作用域时调用函数时,this对象引用的就是window)
函数的名字仅仅是一个包含指针的变量而已。
caller 这个属性中保存着调用当前函数的引用
函数的属性和方法
length 属性表示函数希望接收的命名参数的个数
prototype 属性是保存他们所有实例方法的真正所有
每个函数都包含两个非继承而来的方法 apply() 和call() 这两个方法的用途都是在特定的作用域调用函数,实际上等于设置函数体内this对象的值
bind() 方法创建了一个函数的实例
6)基本包装类型
为了方便操作基本类性值,ECMAScript 还提供了3个特殊的引用类型 Boolean Number 和string
引用类型与基本包装类型主要区别就是对象的生存期
Boolean 类型是与布尔值对应的引用类型
Number 是与数字值对应引用类型
toFixed()方法会按照指定的小数位返回数值的字符串表示
toExponential() 格式化数值的方法,该方法返回以指数表示法
string类型是字符串对象包装类型
string类型的每个实例都有一个length属性,表示字符串中包含多个字符
(1)字符方法
charAt() 以单字符字符串的形式返回给定位置的那个字符 和charCodeAt() 如果想得到的不是字符而是编码用这个 这两个方法都接收一个参数,即基于0的字符位置
(2)字符串操作方法
concat() 方法用于将一或多个字符串拼接起来返回拼接得到的心字符串
slice()、substr()、substring()这三个方法都会返回被操作字符串的一个子字符串,而且也都接受一个或两个参数,第一个参数指定字符串的开始位置,第二个参数表示子字符串到哪里结束。
具体来说slice() 和substring() 的第二个参数指定的是子字符串最后一个字符后面的位置 而substr()的第二个参数指定的则返回字符个数。
(3)字符串位置方法
indexOf()、lastIndexOf() 从字符串中查找字符串的方法,这两个方法都是从一个字符串中搜索给定的子字符串,然后返回子字符串的位置。
(4)trim()方法
trim()方法 创建一个字符串副本,删除前置机后缀所有空格,然后返回结果
(5)字符串大小写转换的方法
toLowerCase()、toLocaleLowerCase()、toUpperCase()、toLocaleUperCase()
(6)字符串的模式匹配方法
match() 只接受一个参数 要么是一个正则表达式 要么是一个RegExp对象
search() 接受参数同上 始终从一个字符串开通向后查找模式
replace() 替换字符串g全局替换
split() 这方法可以基于指定的分隔符将一个字符串分割多个子字符串,并将结果放在一个数组中
(7)localeCompare()方法
这个方法比较两个字符串
(8)fromcharCode()方法
这个方法的任务是接收一个多个字符编码,然后将他们转换成一个字符串
7)单体内置对象
定义:不依赖宿主环境的对象,这些对象在ECMAScript程序之前就已经存在了。
单体内置对象Global 和Math