窥探于《JavaScript高级程序设计.第3版》第5章“引用类型”。
夹杂了自我的愚解,然后经过自我的蹂躏,就成了如下的读后感了。
站在巨人的肩膀,看得更远。希望有人也能踩着我的肩膀前进哈。
一. Obejct类型
好处:在应用程序中存储和传输数据,是非常理想的选择。
创建方式:
1,new+Object构造函数
var person=new Object();
person.name="Nicholas";
person.age=29;
2,对象字面量
var person={
name:"Nicholos",
age:"29"
}
引用Object的属性:
1,点表示法
person.name;
2,方括号表示法来访问对象的属性
person["name"]
二.Array类型
注:Array简称数组,与java语言相比,它更加自由,它的每一项可以保存任何类型的数据。
1.创建方式
(1),var colors = new Array(); //new 加Array构造函数声明方式创建
(2),var colors=["red","blue","green"] ; //数组字面量表示法
注:有些特殊的细节得注意:
首先对于构造函数方式创建数组如下几种形式都是对的。
var colors= new Array(20); //创建length为20的数组
var colors = new Array("red","blue","green"); //创建3个字符串值的数组
var colors= Array(3); //省略new,创建length为3的数组
var names =Array("Greg"); //省略new,创建1个字符串值的数组
对于数组字面量表示法,如下特殊的形式也是正确的:
var names=[]; //创建一个空数组
var values=[1,2,]; //这样也对,但是不同的浏览器对其的认知可能有所偏差,例如在IE8及之前版本中,values会成为一个包含3个项且每项的值分别为1、2和undefined的数组;在其他浏览器中,values会成为一个包含2项且分别为1和2的数组。所以建议别这么用。
2.Array用法
var colors=new Array("lv","zhang","guo");
(1),Array数组长度的获取
alert(colors.length); //3
(2),取值
alert(colors[0]); //lv
alert(colors[100]); //取值超过数组的length,返回undefined
(3).赋值
colors[0]="jin";
alert(colors[0]); //jin
注:如果某个值得索引超过了 数组现有项数,数组的length会自动增加该索引值
colors[99] = "black";
alert(colors.length); //100
(4),检测数组
Array.isArray(value); //检测value是否为数组 true是 flase否
(5),转化方法
alert(colors.toString()) ; //lv,zhang,guo
alert(colors.valueOf()); //lv,zhang,guo
alert(colors); //red,zhang,guo
join()方法只接受一个参数,即用作分隔符的字符串,然后返回包含所有数组的字符串。
alert(colors.join("||")); //red||green||red
(6).栈方法
var colors = new Array(); //创建一个数组
var count=colors.push("lv","zhang"); //推入两项
alert(count); //2
count = colors.push("guo"); //推入另一项
alert(count); //3
var item =colors.pop(); //取得最后一项
alert(item);
alert(colors.length);
注:push()方法可以接受任意数量的参数,把它们一个个的添加到数组尾部,并返回修改后数组的长度。
pop()方法则从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。
(7).队列方法
var colors= new Array(); //创建一个数组
var count= colors.push("lv","zhang"); //推入两项
alert(count); //2
count = colors.push("guo");
alert(count); //3
var item = colors.shitf(); //取得第一项
alert(item); //lv
alert(colors.length); //2
注:shift()方法能够移除数组中的第一项并返回该项,同时将数组长度减1.
unshift()方法能在数组前端添加任意个项并返回新数组的长度。
(8)重排序方法
var values = [1,2,3,4,5];
values.reverse();
alert(values); //5,4,3,2,1
注:reverse()方法会反转数组项的顺序。
fuction compare(value1,value2){
if(value1<value2){
return -1;
}else if(value1>value2){
return 1;
} else{
return 0;
}
}
var values=[0,1,5,10,15];
values.sort(compare);
alert(values); //0,1,5,10,15
注:sort()方法按升序排列数组项-----即最小的值位于最前面,最大的值排在最后面。
但是sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序。但是这种排序方式在很多情况下都不是最佳方案,因此sort()方法可以接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。
(9)操作方法
var colors = ["lv","zhang","guo"];
var colors2=colors.concat("love",["lu","yan"]);
alert(colors); //lv,zhang,guo
alert(colors2); //lv,zhang,guo,love,lu,yan
注:concat()方法可以基于当前数组中的所有项创建一个新数组。
var colors = ["lv","zhang","guo"];
var colors2=colors.slice(1);
var colors3 =colors.slice(1,2);
alert(colors2); //zhang,guo
alert(colors3); //zhang,guo
注:删除 :可以删除任意数量的项,只需指定2个参数:要删除的第一项的位置和要删除的项数,例如splice(0,2)会删除数组中的前两项。
插入:可以向指定位置插入任意数量的项,只需提供3个参数:起始位置、0(要删除的项数)和插入的项。如果要插入多项,可以再传入第四、第五,以至任意多个项。
替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。
(10)位置方法
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
(11)迭代方法
every()、filter()、forEach()、map()、some()为数组的5个迭代方法。
every()用法:
var numbers=[1,2,3,4,5,4,3,2,1];
var everyResult=numbers.every(function(item,index,array){
return (item>2);
});
alert(everyResult); //false
注:every()对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true.
some()用法:
var someResult=numbers.some(function(item,index,array){
return (item>2);
});
alert(someResult); //true
注:对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true;
filter()用法:
var filterResult = numbers.filter(fuction(item,index,array){
return (item>2)
});
alert(filterResult); //[3,4,5,4,3]
注:filter()对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
map()方法用法:
var mapResult = numbers.map(function(item,index,array){
return item*2;
});
alert(mapResult); //[2,4,6,8,10,8,6,4,2]
注:map()对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
forEach()方法用法:
numbers.forEach(fuction(item,index,array){
//执行某些操作
});
注:对数组中的每一项运行给定的函数。这个方法没有返回值。
(11)归并方法
reduce()方法:(一).从数组的第一项开始,琢个遍历到最后。 (二)接受两个参数:一个在每一项上调用的函数和(可选)作为归并基础的初始值。(三),传给reduce()的函数接收4个参数:前一个值、当前值、项的索引和数组对象。
例如: var values=[1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,array){
return prev+cur;
});
alert(sum); //15
reduceRight()方法:(一).从数组的最后一项开始,琢个遍历到第一项。 (二)接受两个参数:一个在每一项上调用的函数和(可选)作为归并基础的初始值。(三),传给reduce()的函数接收4个参数:前一个值、当前值、项的索引和数组对象。
例如: var values=[1,2,3,4,5];
var sum = values.reduceRight(function(prev,cur,index,array){
return prev+cur;
});
alert(sum); //15