引用类型(Object 和 Array)
引用类型,也即是类,java、 oc、 swift等面向对象的类的概念。
- Object 类型
Object 是用得最多的一种类型,它的实例不具备多少功能,但对于应用程序存储和传输数据而言,是非常不错的选择,简化版本的 NSObject~~~
Object 创建实例的两种方式:
new 方式:
var person = new Object();
person.name = "dyh";
字面量表示法:
var person = {
name : "dyh"
};
注意字面量表示法中,属性名可以用字符串表。
js 中除了通过打点方式访问属性,还能通过以字符串的形式放在方括号中:
person["name"];
person.name;
- Array 类型
js 中 数组的大小是可以动态调整的。
创建方式:
var array = new Array(10); // 大小为10的数组
var array = new Array("a", "b", "c");
Array 构造函数时,可以省略 new:
var array = Array(10);
Array 可以通过下标访问,参考c。
数组检测:
if (values instanceof Array) {
}
为了防止同时有多个框架对Array的构造函数不同的问题,ECMAScript 5 新增 Array.isArray() 方法:
if (Array.isArray(values)) {
}
栈方法:
js为Array专门提供 push() 和 pop() 方法,实现类似栈的行为。
var array = Array();
array.push("a", "b"); // 推入两项
array.pop(); // 出栈
队列方法:
提供了 push() 和 shift() 方法
重排序方法:
第一个参加在第二个参数前,返回负数,在后,返回正数,并列,返回 0
function compare(value1, value2) {
if (value1 > value2) {
return 1;
} else if (value1 < value2) {
return -1;
} else {
return 0;
}
}
var arr = [2,1,3,5,7];
arr.sort(compare); // [1,2,3,5,7]
操作方法:
串联一个数组(concat(一个或多个参数)):
var nums1 = [1, 2, 3, 4];
var nums2 = nums1.concat(5, [6, 7]); // nums2 = [1,2,3,4,5,6,7]
截取数组(slice(范围)):
nums = [1, 2, 3, 4, 5]
var nums1 = nums.slice(1); // nums1 = [2, 3, 4, 5]
var nuns2 = nums.slice(2, 3); // nums2 = [3, 4]
神奇的 splice():
删除:指定2个参数, 要删除的第一项和要删除的项数, splice(0, 2) 删除前两项;
插入:指定3个或者3个以上参数,前2个参数如上,后面是插入的参数项, splice(2, 0, "num1", "num2")
从插入功能 --> 替换功能:splice(2, 0, "num1")
位置方法
两个位置方法:indexOf() 和 lastIndexOf();都接受两个参数:要查找的值和(可选的)查找起点位置索引。
var nums = [1, 2, 3, 4, 5, 4, 3, 2, 1];
nums.indexOf(4); // 3
nums.lastIndexOf(4); // 5
nums.indexOf(4, 4); // 5
nums.lastIndexOf(4, 4); // 3ki
迭代方法
js 为数组定义5个迭代方法:every()、some()、filter()、forEach()、map():
var nums = [1, 2, 3, 4, 5, 4, 3, 2, 1];
var everyResult = nums.every(function(item, index, array){
return (item > 2);
});
alert(everyResult); // false
var someResult = nums.every(function(item, index, array){
return (item > 2);
});
alert(someResult); // ture
var filterResult = nums.every(function(item, index, array){
return (item > 2);
});
alert(someResult); // [3, 4, 5, 4, 3]
var mapResult = nums.every(function(item, index, array){
return item * 2;
});
alert(mapResult); // [2, 4, 6, 8, 10, 8, 6, 4, 2]
nums.forEach(function(item, index, array){
// 执行某些操作
});
归并方法
ECMScript 5 新增两个归并数组: reduce() 和 reduceRight():
var value = [1, 2, 3, 4, 5];
var sum = value.reduce(function(prev, cur, index, array){
return prev + cur;
});
alert(sum); // 15