5.1 Object类型
对象是属性的无序集合,由键名和属性值组成
【键名】
对象的所有键名都是字符串,所以加不加引号都可以,如果不是字符串也会自动转换成字符串
【属性值】
属性值可以是任何类型的表达式,最终表达式的结果就是属性值的结果
http://www.cnblogs.com/xiaohuochai/p/5741616.html
5.2 Array类型
http://www.cnblogs.com/xiaohuochai/p/5679605.html
创建数组的基本方式有两种,使用Array构造函数和数组字面量。
数组的length属性很有特点,他不是只读的。通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项。
var color = ["red","blue","green"];
color.length=2;//删除项
color[color.length]="black";//添加项
将数组清空的一个有效方法就是将length设为0
类数组:拥有length属性和对应非负整数属性的对象叫做类数组。
常见的三个类数组对象:arguments对象、DOM方法(如document.getElementsByTagName()方法)返回的对象、字符串
检测数组:对于一个全局作用域,instanceof()即可。如果网页中包含多个框架,则用Array.isArray()
数组的一些方法
1.栈方法:push()方法可以接收任意数量的参数,把他们逐个添加到数组末尾,并返回修改后数组的长度。
pop()方法则从数组的末尾移除最后一项,减少数组的length值,然后返回移除的项。
2.队列方法:shift()方法能够移除数组中的第一项并返回该项,同时将数组的长度减1。
unshift()方法与shift方法用途相反,它能在数组前端添加任意个项并返回新数组长度
3.重排序方法:reverse()方法反转数组原来的顺序
sort()方法按升序排列数组项,它会调用toString方法得到每一项的字符串进行比较,即使数组中的每一项都是数值。
所以会出现10>5的情况。因此,sort方法可以接收一个比较函数,比较函数接收两个参数,如果第一个参数应该位于第二个
之前返回负数,如果两个参数相等返回0,如果第一个参数应该位于第二个之后则返回一个正数。
4.操作方法:concat()方法能够基于当前数组中的项创建一个新数组,它会先创建当前数组的一个副本,然后将接受到的参数添加到这个数组的末尾,最后返回新构建的数组。在没有给该方法传递参数的情况下,它只是复制当前数组并返回副本。如果传递给concat的是一个或多个数组,则该方法
会将这些数组中的每一项都添加到结果数组中。如果传递的值不是数组,这些值就会被简单的添加到数组末尾。
slice()方法可以接收一个或两个参数,即要返回项的起始和结束位置。在只有一个参数的情况下,slice方法返回从该参数指定位置开始到末尾的所有项。如果有两个参数,该方法返回起始和结束位置之间的项(不包括结束位置的项)。
splice()方法是一个很强大的数组方法,使用这种方法的方式有以下三种。
删除:可以删除任意数量的项,只需指定2个参数:要删除的第一项位置和要删除的项数。
插入:可以向指定位置插入任意数量的项,只需传递三个参数:起始位置、0(要删除的项数)、要插入的项。
替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3个参数:起始位置、要删除的项数、插入的项数不必与删除的相等。
splice方法会返回一个数组,该数组包含从原始数组中删除的项(如果没有删除任何项则返回一个空数组)
var color = ["red","green","blue"];
var removed = colors.splice(0,1);
alert(colors); //green,blue
alert(removed); //red
removed = colors.splice(1,0,"yellow","orange");
alert(colors); //green,yellow,orange,blue
alert(removed); //返回空数组
removed = colors.splice(1,1,"red","pink");
alert(colors); //green,red,pink,orange,blue
alert(removed); //yellow
5.位置方法
indexOf和lastIndexOf.这两个方法都接收两个参数。其中index从头开始查找,lastIndexOf从尾开始查找
var numbers = [1,2,3,4,5,4,3,2,1];
alert(numbers.indexOf(4)); //3
alert(numbers.lastIndexOf(4)); //5
alert(numbers.indexOf(4,4)); //5
alert(numbers.lastIndexOf(4,4)); //3
6.迭代方法
一共有5个迭代方法,每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象(影响this值)
传入这些方法中的函数会接收三个参数:数组项的值、该项在数组中的位置和数组对象本身。
every(): 对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true
filter(): 对数组中的每一项运行给定的函数,返回该函数会返回true的项组成的数组
forEach(): 对数组中的每一项运行给定函数,这个方法没有返回值
map(): 对数组中的每一项运行给定的函数,返回每次函数调用结果组成的数组
some(): 对数组中的每一项运行给定的函数,如果该函数对任意一项返回true,则返回true
使用forEach()方法实现简单的加法
var sum = 0; [1, 2, 3, 4].forEach(function (item, index, array) { sum += item; }); console.log(sum);//10
forEach()方法除了接受一个必须的回调函数参数,第二个参数还可以接受一个可选的上下文参数(改变回调函数里面的this指向)
var out = []; [1, 2, 3].forEach(function(elem){ this.push(elem * elem); }, out); console.log(out);// [1, 4, 9]
第二个参数对于多层this非常有用,因为多层this通常指向是不一致的,可以使用forEach()方法的第二个参数固定this
var obj = { name: '张三', times: [1, 2, 3], print: function () { //该this指向obj console.log(this); this.times.forEach(function (n) { //该this指向window console.log(this); }); } }; obj.print();
var obj = { name: '张三', times: [1, 2, 3], print: function () { //该this指向obj console.log(this); this.times.forEach(function (n) { //该this同样指向obj console.log(this); },this); } }; obj.print();
http://www.cnblogs.com/xiaohuochai/p/5682621.html
7. 归并方法
reduce()和reduceRight().这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。reduce从数组第一项开始,逐个遍历到最后。而reduceRight()则从数组的最后一项开始,向前遍历到第一项。
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,array){
return prev+cur;
});
alert(sum); //15
reduceRight作用类似,只是方向相反而已
后面的就不写博客了,因为写博客进度太慢,而且发现并没有那么适合我现在的学习情况。。