第5章 引用类型

引用类型是一种数据结构,常常被称为类,对象是某个特定引用类型的实例。

5.1object类型
创建object实例的方式有两种
var person=new object();//使用new操作符后跟object构造函数
var person={//对象字面量表示法
name:"nicholas",
age:29
}
上面的name和age也可以加上引号  
访问对象的属性方法:
点表示:person.name
方括号表示:person["name"]
通常使用点方法
5.2array类型
javascript的array数组类型可以保存任何类型的数据,并且不限制长度
创建的方式:
1.
var colors=new array();
可以直接给定length的值
var colors=new array(20);//括号内可以是数组的元素值
可以省略new操作符
var colors=array(3);
2.
数组字面量表示法,由一对包含数组像的方括号表示,多个数组项之间以逗号隔开。
var colors=["red","blue","green"]//包含3个字符串的数组
var names=[];
  alert(colors[0]);//访问数组元素   red
colors.length的值为3。同样的设置length的值可以增加或减少数组元素的个数
5.2.1检测数组
array.isarray(var).确定是否是数组
常用的句子
if(Array.isArray(value)){//对数组执行某些操作}
5.2.2转换方法
所有对象都具有toLocaleString()    toString()和valueof()方法
toSting会返回所有数组元素组成的字符串拼接而成的以逗号分隔的字符串。
valueof返回的还是数组本身。
alert函数接收字符串参数,所以他会在后台调用toString的方法,由此会得到直接调用toString方法相同的结果
join方法  用不同的分隔符来构建字符串,只接收一个参数  即作分隔符的字符串,然后返回包含所有数组项的字符串
5.2.3堆栈方法   lifo    后进先出
push()方法   接收任意数量的参数    逐个添加到数组末尾   返回新数组  length值加大
pop()方法   没有参数    弹出数组的最后一项   返回数组的长度
5.2.4队列方法   先进先出       在队列的末端添加    在队列的前端移除    
shift()方法  删除数组中的恶第一项     并将其返回       数组长度减1   相当于队列左移
unshift()方法     在数组前端添加任意的项    返回数组的新长度     按照顺序一个一个项的添加
5.2.5重排序方法
   reverse()反转
sort()    会调用每个数组项的toString的转型方法,然后比较得到的字符串
接收比较函数作为参数,来确定排序的方式
5.2.6操作方法
concat()方法可以基于当前数组中的所有项创建一个新数组。
没有参数只是创建当前数组的一个副本,并返回
如果有参数,就将参数添加到结果数组中,并返回新数组。
slice()一个或两个参数
如果为一个参数则返回参数指定位置到末尾的所有项
两个参数,返回第一个参数位置到第二个参数位置之间的项
        允许参数是负数   详情看手册
splice()算非常强大的数组方法,很多种用法
删除   :指定2个参数,要删除的第一项的位置和要删除的项数,例如splice(0,2)会删除数组中的前两 项。
插入:最少3个参数:起始位置,0(要删除的项数),要插入的项
替换:最少3个参数:起始位置,要删除的项数,要删除的项数和要插入的任意数量的项
始终都会返回一个新数组,  不会影响原始数组
5.2.7位置方法
       接收两个参数要查找的项和表示查找起点位置的索引。
返回查找项在数组中的位置,或者在没找到的情况下返回-1   
        index()从头开始查找
lastIndexOf()从末尾开始查找
 
5.2.8迭代方法
5中方法     每个方法都接收两个参数    :要在每一项上运行的函数和运行该函数作用域对象----影响this的值
传入这些方法中的函数会接收三个参数:数组项的值,该项在数组中的位置和数组对象本身。
该函数执行后的返回值可能会也可能不会影响访问的返回值。
every() 对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true   
filter()  ...... 返回该函数会返回true的项组成的数组
foreach()....                       没有返回值
map()..... 返回每次函数调用的结果组成的数组
some()...... 任何一项返回true    就会返回true
 
5.2.9缩小方法
迭代数组的所有项,然后构建一个最终返回的值。
       reduce()      从头开始   逐个遍历
reduceRight()      从末尾开始   逐个遍历
接收两个参数,一个在每一项上调用的函数和可选的作为缩小基础的初始值。
传给上面两个函数的函数接收4个参数:前一个值,当前值,项的索引和数组对象。
例子:var sum=values.reduce(function(prev,cur,index,array){
执行的函数体
}
5.3date类型
5.4regexp类型   支持正则表达式    专刊
 
 
 
 
5.5function类型
     函数式对象  ,每个函数都是Function类型的实例,而且都域其他引用类型一样具有属性和方法。函数名市级上是一个指向函数对象的指针,不会与某个函数绑定。
    定义函数的方式
function sum(num1,num2){
return num1+num2;
}
 
var sum=function(num1,num2){
return num1+num2;
};
 
var sum=new Function("num1","num2","return num1+num2");//不推荐
5.5.1没有重载(深入理解)
最后声明的函数会覆盖之前声明的函数
无论函数个数是否一致
5.5.2函数声明与函数表达式
解析器率先读取函数声明,并使其在执行任何代码之前可用;至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被执行。
5.5.3作为值得函数
不仅可以将一个函数传递给另一个函数,也可以将一个函数作为另一个函数的结果返回。
注意函数作为参数时要去掉括号,因为要访问函数的恶指针而不是执行函数,
   
在一个函数中返回另一个函数是很有用的技术,假设对象数组排序,sort方法,比较函数需要确定排序的属性。
5.5.4函数的内部属性
函数内部两个特殊的对象,arguments和this
前者是数组对象,包含着传入函数中的所有参数。
callee的属性是指针,指向拥有这个arguments对象的函数
例子:递归算法
function a(num){    return num*a(num-1)}
等价于               ......       return num*arguments.callee(num-1)
this根据当前的环境引用不同的对象
caller属性保存着调用当前函数的函数的引用   即上级函数
5.5.5函数的属性和方法
函数式对象所以也有属性和方法。每个函数都包含两个属性:length和prototype一个是参数的恶个数,一个是函数的原型。
     prototype是保存引用类型的所有实例方法的真正所在。
例如tostring和valueof等方法实际上都保存在prototype名下,只不过是通过各自对象的实例访问罢了。
它的属性不可枚举,所以不能用for-in发现
每个函数具有的非继承来的方法,apply和call在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。
apply接收连个参数,一个是作用于,一个是参数数组(可以是arguments对象,也可以是数组)
call方法 第二个参数只能是逐个列举的参数。
 
 
 
5.6基本包装类型
 
boolean    number和string与之前的引用类型相似   只是实例存在的时间就是单行代码语句的开始到结束   而引用类型是当前环境作用范围
5.6.1boolean   
 
原文地址:https://www.cnblogs.com/dongguolei/p/7902834.html