1. 创建对象:对象(引用类型的值,是引用类型的一个实例)
创建Object实例。
方法一:使用new操作符后跟Object构造函数。
var person = new Object();
person.name = "Nicholas";
person.age = 29;
方法二:使用对象字面量表示法-----不会调用Object构造函数
var person = {
name : "Nicholas", //注意,这里是逗号
age : 29
}
也可以将属性名使用字符串
var person = {
"name" : "Nicholas",
"age" : 29,
5 : true //数值属性名会自动转换成字符串
}
此外,使用对象字面量时,可一只使用{}---作用于new Object()类似,只包含默认属性和方法
2. 访问对象的属性
① 点表示法:person.name
② 方括号表示法:person["name"]----优势是(1) 可以使用变量访问属性,(2) 属性名包含会导致语法错误的字符或者属性名使用的是关键字或保留字如:
(1) var propertyName = "name";
alert(propertyName);
(2)person["first name"] = "nicholas";
3. 创建数组:Array类型-----数组的每一项都可以保存任何类型的数据。
方法一:使用Array构造函数
var colors = new Array();
var colors = new Array(10); //创建的数组的大小为10,但数组的大小不是固定的,尅动态改变
var colors = new Array("red", "blue", "green"); //创建了包含三个字符串值的数组
注意:给构造函数传递一个值时,有两种意思
var colors = new Array(3); //创建一个包含三项的数组
var colors = new Array("Greg"); //创建一个包含一项,值为Greg的数组
方法二:使用数组字面量表示法
var colors = ["red", "blue", "green"]; //包含3个字符串的数组
var colors = []; //一个空数组
3. 动态的增加数组的长度
var colors = ["red"];
arr.length = 2; // colors[0] = "red" colors[1] = undefined
colors[2] = "blue"; //colors[0] = "red" colors[1] = undefined colors[2] = "blue"
4. 检测某个值是不是数组: Array.isArray(value)
5. 数组的转换方法:toString() valueOf() toLocaleString() ------所有的对象都有这三个方法
① toString() 方法,会调用数组的每一项的toString() 方法
② valueOf() 方法,返回的是数组本身
③ toLocaleString() 方法,会调用数组每一项的toLocaleString() 方法
如:
(1) var colors = ["red", "blue", "green"];
colors.toString(); // red,blue,green
colors.valueOf(); //red,blue,green
alert(colors); //red,blue,green -----这里是因为alert() 函数要接收字符串参数,所以在后台会调用toString()方法
(2) var person1 = {
toLocaleString: function (){
return "Nikolaos";
}
toString: function (){
return "Nikolaos";
}
}
var person2 = {
toLocaleString: function (){
return "Grigorios";
}
toString: function (){
return "Greg";
}
}
var people = [person1,person2];
alert(people); //Nicholas,Greg
alert(people.toString()); //Nicholas,Greg
alert(people.toLocaleString()); //Nicholas,Grigorios
6. 栈方法和队列方法
① 栈方法:先进后出 栈的插入(推入)移除(弹出)都发生在栈的顶部。
ECMAScript为数组提供了pop() -----在数组末尾移除元素,返回被移除的值 和 push() -----在数组末尾增加项数,返回数组的长度方法来模拟栈
var colors = new Array();
colors.push("red","green"); //red green 返回2
color.pop(); //green
② 队列方法:先进先出 在列表的末端添加项,从列表的前端移除项
模拟队列:(1)push从后端进,shift 从前端移除
var colors = new Array();
colors.push("red","green");
color.shift(); //red
(2)unshift从前端进,pop从后端移除
7. 数组的重排序方法:reverse() sort()
其中sort()函数可以传一个参数,用来控制准确度,也可以通过该参数来确定正序还是逆序。
array.reverse() array.sort()
8. 数组的操作方法:concat() slice() splice()
concat():用来拼接数组。先创建当前数组的一个副本,然后再将接收到的参数添加到数组的末尾,最后返回一个新数组。不会改变原来数组的值。
① 没有任何参数,即只是复制当前数组。
② 有一个或多个参数,将参数依次添加到数组末尾
var colors = ["red", ''green", "blue"];
var c1 = colors.concat("yellow"); //c1:red green blue yellow
var c2 = colors.concat(["black", "brown"]); // c2: red green blue black brown
slice():切割--将给定数组按照函数的参数,切割成想要的数组,最后返回的是一个新数组:参数从指定起始位置到指定结束位置(不包含结束位置)的所有项。不会改变原来数组的值
① 只有一个参数:返回的是该参数指定的位置至数组末尾的所有项数。
var colors = ["red", "green", "blue", "yellow", "purple"];
var c1 = colors.slice(1); // c1:green blue yellow purple
② 两个参数:返回的是参数从指定起始位置到指定结束位置(不包含结束位置)的所有项
var c2 = colors.slice(1,3); // c2:green blue
splice():胶接--用于删除,插入,替换数组。会改变原来的数组,返回的是一个数组,包含删除的原数组的项数
① 删除:
var colors = ["red", "green", "blue"];
var c1 = colors.splice(0,2); // colors:blue。c1:red green删除原数组的前两项。0代表从数组的起始位置开始,2代表删除原数组的项数。
② 插入:
var colors = ["red", "green", "blue"];
var c2 = colors.splice(1,0,"yellow","orange"); // colors:red yellow orange green blue。c2:空数组。1代表从数组的第二项开始,0代表不删除数组的任何元素,后面的两项代表要插入的项数
③ 替换:注意,替换的项数可以不等于删除项数
var colors = ["red", "green", "blue"];
var c3 = colors.splice(0,2,"black"); // colors:black blue。c3:red green。0代表从数组的第一个元素开始,1代表数组的第二个元素要被替换掉,black代表要替换的项。
9. 数组的位置方法:indexOf() lastIndexOf()-----返回指定位置的索引。是严格意义上的相等(===)
① 一个参数
var num1 = [1, 2, 3, 4, 5, 4];
alert(num1.indexOf(4)); // 3---4代表寻找数组中第一个项的值为4的索引
② 两个参数
var num1 = [1, 2, 3, 4, 5, 4];
alert(num1.indexOf(3,1)); // 2---3代表要寻找的项的值为3,1代表从数组的第二个位置寻找。
注意:严格意义上的相等(对象只有地址相同才相等)
var person = {name:"Nicholas"};
var people = [{name:"Nicholas"}];
var morepeople = [person];
people.indexOf(person); //-1 没有找到相关的项的值,就返回-1
morepeople.indexOf(person); //0
10. 数组的迭代方法(遍历数组):every() some() filter() map() foreach()----都包含两个参数,第二个是可选的,第一个是指定的在每一项上运行的函数。而该函数有三个参数---数组项的值,该项在数组中的位置,数组对象本身。
① every()---返回值为true或false。对数组的每一项执行给定函数,如果每一项都返回true,则该函数就返回true,否则,返回false。
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
var everyResult = numbers.every(function(item, index, array){
return (item > 2);
}); // everyResult的结果是false
② some()---与every()类似,但只要数组有一项满足指定函数,就返回true。
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
var someResult = numbers.every(function(item, index, array){
return (item > 2);
}); // someResult的结果是true
③ filter():对数组的每一项运行给定函数,返回值为数组(数组的项数为函数返回true的项)
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
var filterResult = numbers.filter(function(item, index, array){
return (item > 2);
}); //filterResult的结果为数组:3 4 5 4 3
④ map():对数组的每一项运行给定函数,返回值为数组(数组的项数为原数组每一项执行函数后的值)
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
var mapResult = numbers.map(function(item, index, array){
return item * 2;
}); //mapResult的结果为数组:2 4 6 8 10 8 6 4 2
⑤ foreach():类似于for循环迭代数组。没有返回值。
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
numbers.forEach(function(item, index, array){
//执行某些操作
});
11. 数组的归并方法----reduce() reduceRight()----都接收两个参数,在每个项调用的函数和作为归并基础的初始值(可选)。而该函数接收四个参数,前一个值,当前值,项的索引,数组对象。该函数返回的值作会作为第一个参数传给下一项。
① reduce():从数组的第一项开始,逐个遍历到最后
var values = [1, 2, 3, 4, 5];
var sum = values.reduce(function(pre, cur, index, array){
return pre+cur;
}); // sum = 15。这里pre为数组的第一个值,cur位数组的第二个值
② reduceRight():从数组的最后一项开始,逐个遍历到第一项。