JavaScript的引用类型的运用、
一、Object
我们在开发JavaScript的时候、用到的最多的示例都是Object的示例、例如:
var person = new Object();
Object是一个构造函数、JavaScript规定在使用构造函数时、若构造函数不需要参数、则可以省略构造函数后边的括号、就变成了下边这样、
var person = new Object;
创建实例有两种方式、一种是使用new构造符、如上边那样、一种是采用对象字面量的方式、此种方式和使用new构造符的唯一区别就是不会调用构造函数、例如:
var person = {}; //不会调用构造函数Object、
var stu = {
name : 'John', //第一个属性后边需要跟一个逗号分开、属性name和age也可以使用引号括起来、
age : 21 //最后一个属性后边不能跟逗号、否则在一些低版本的浏览器中会报错、
};
Object的实例有两种方式可以访问属性的示例、第一种是通过点号【.】来访问、
var name = person.name;
第二种是通过中括号、里边用字符串的形势、当属性中含有特殊字符或空格时、只能使用这一种方式、
var name = person['name'];
var name = person['first name'];
还可以将一个变量传入到中括号中实现对属性的访问、
var attr = 'first name';
var name = person[attr];
二、Array类型、
1.数组的声明、
var arr = new Array(); //同Object一样、可以省略括号、
var arr = new Array;
var arr = new Array(20); //声明一个长度为20的数组、
var arr = new Array('a', 'b', 'c'); //声明一个初始值为['a', 'b', 'c']、长度为3的数组、
数组也可以使用对象字面量的方式声明、同Object一样、使用对象字面量方式时、不会调用数组的构造函数Array、
var arr = ['a', 'b', 'c']; //声明一个初始值为['a', 'b', 'c']、长度为3的数组、
var arr = ['a', 'b', 'c', ]; //后边多一个逗号的方式最好不要使用、因为不同的浏览器解析的结果不一致、
本人实测结果在最新版的Chrome(版本 38.0.2125.111 m)、Firefox(33.0.2)、IE11下是一致的、
var arr = [, , , , ]; //此中方式也不要使用、
数组可以存储任何类型的值、每个数组项的值也可以不同、
2.数组项赋值和取值、可以通过下标方式、
var arr = new Array(3); //声明一个长度为3的数组、
arr[0] = 'a';
arr[1] = 'b';
arr[2] = 'c';
取值也可以通过下标、
alert(arr[0]); //取得数组中下标为0的项、即数组中的第一个值、
3.数组类型的判定、
数组是引用类型、因此不可以使用typeof方式、但JavaScript又提供了一个instanceof方法来检测给定的实例是不是Array类型、
var arr = new Array();
alert(arr instanceof Array); //arr是数组、因此返回true、
最新版本的JavaScript提供了一个原生方法、Array.isArray(arr);
而网上给出了另外一种方式、
Object.prototype.toString.call(arr) === '[object Array]';
4.数组的末尾追加数据、从数组的末尾删除数据、
var arr = ['a', 'b', 'c'];
Arry类提供一个方法来从数组的末尾添加数据、并返回添加后数组的长度、
var length = arr.push('d');
var length = arr.push('e', 'f');
Array还提供了一个方法来从数组的末尾删除数据、
var item = arr.pop(); //删除数组的最后一项、并返回删除的项
【注】push和pop方法都会改变原始数组arr的值、
还可以使用concat方法、
arr.concat('yellow');
arr.concat([1, 2, 3, 4, 5]);
arr.concat('black', [11, 22, 33]);
【注】concat方法会改变原始数组arr的值、
5.数组的开头追加数据、从数组的开头删除数据、
var arr = ['a', 'b', 'c'];
从数组的开头添加数据、并返回数组新的长度、
var length = arr.unshift('d');
var length = arr.unshift('e', 'f');
从数组的开头删除一条数据、并返回删除的数据、
var item = arr.shift();
【注】unshift和shift方法都会改变原始数组arr的值、
6.删除数组中指定位置开始、指定个数的项、在指定位置插入指定个数的项、
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
删除时数组指定位置、指定个数的额数据、
var tmp = arr.splice(1, 2); //删除数组中的'b'和'c'、并返回新的数组、并返回'b'和'c'、
var tmp = arr.splice(1, 0, 'yellow', 'red'); //将'yellow'和'red'插入到数组的第一个和第二个位置、
var tmp = arr.splice(1, 1, 'blue'); //将第一个位置上的值替换为'blue'、
splice方法的第一个参数指的是数组中的位置、第二个参数要删除多少个数组项、后边的为要插入到数组中的值、
【注】splice方法会改变原来数组的值、
7.数组的排序、
var arr = ['a', 'b', 'c'];
数组项的反转、
arr.reverse(); // 结果['c', 'b', 'a']
数组还提供了一个方法来实现排序、默认情况下、调用arr.sort()方法(不加参数时)、会采用升序方式、但对字符串排序时'5' > '10'、因此并不适用所有情况、
如下可以使用回调函数、回调函数的参数val1、val2为数组相邻两项的值、若val1应该位于val2之前则返回一个正数、若val1位于val2之后则返回一个负数、相等返回0
arr.sort(function(val1, val2) {
if (val1 < val2) { return 1;}
else if(val1 > val2) {return -1;}
else {return 0;}
});
8.数组的截取和查找、
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
var tmpArr = arr.slice(2); //从下标为2的位置开始到数组的结尾、
var tmpArr = arr.slice(2,4); //从下标为2的位置开始到下标为4的位置结束、不包含下表为4的项、
数组的查找、indexof方法在和数组中的项比较时使用的是全等比较、
arr.indexof('a'); //返回true、
arr.indexof('A'); //返回false、
9.迭代方法every、some、forEach、filter、map、这五个方法不会改变原始数组中的值、
var arr = [1, 2, 3, 4, 5, 6, 5, 4, 3];
a.查找数组中的项是否全满部足给定条件、如果所有项都满足给定的条件、则返回true、否则返回false、
var resultArr = arr.every(function(item, index, array) { //item数组的项、index为该项的下标、array为该数组、
return (item > 4);
});//结果resultArr为false、
b.查找数组中是否存在满足给定条件的项、如果有一个满足、则返回true、否则返回false、
var resultArr = arr.some(function(item, index, array) { //item数组的项、index为该项的下标、array为该数组、
return (item > 4);
});
c.查找数组中所有满足给定条件的项、并返回满足给定条件的数组项组成新数组、
var resultArr = arr.filter(function(item, index, array) {
return (item > 4);
}); //结果resultArr = ['5', '6' ,'5']
d.循环数组中的所有项、
arr.forEach(function(item, index, array) {
//操作......
});
e.数组的map方法、
var resultArr = arr.map(function(item, index, array) {
return item * 2;
}); //结果resultArr = [2, 4, 6, 8, 10, 12, 10, 8, 6];
10.数组中还有两个特殊的方法、reduce和reduceRight、
var arr = [1, 2, 3, 4, 5];
var sum = arr.reduce(function(pre, cur, index, array) { //第一次执行时pre=1、cur=2、第二次循环执行时pre=3存储上次return的结果、cur=3、
return pre + cur;
}); //结果sum = 1+2+3+4+5 = 15;
var sum = arr.reduceRight(function(pre, cur, index, array) { //第一次执行时pre=5、cur=4、第二次循环执行时pre=9存储上次return的结果、cur=3、
return pre + cur;
}); //结果sum=5+4+3+2+1;
JavaScript中、数组是一个很重要的类、希望本人和各位能好好掌握、