1、创建对象
JavaScript中可以通过直接量、关键字new和Object.create函数来创建对象。
1.1、通过对象直接量的方式创建
对象直接量是一个表达式,这个表达式的每次运算都创建并初始化一个新对象。
var point1={x:0,y:0};//两个属性的对象
var point2={x:point1,y:point1.y};//更复杂的值
var apple ={"fruit color":"red",//属性名字有空格,必须用字符串表示
"today-price":5.4 //属性名字有连字符,必须用字符串表示
}
1.2、通过new创建对象
new运算符创建并初始化一个对象,关键字后要跟一个函数调用,函数称为构造函数。JavaScript语言核心中的原始类型都包含内置构造函数。
var b = new Arrary();//空数组
var c = new Date();//当前时间的date对象
1.3、通过Object.create()创建对象
var obj8 = Object.create(null)//创建一个对象的原型属性
var obj9 = Object.create(Object.prototype);//prototype对象的原型属性
2、数组
数组是值都等的有序集合。数组里面的值叫做用元素,而且每个元素在数组中都有一个位置,以数字表示,称为索引。
2.1、创建数组
使用数组直接量是创建数组最简单的方法,在方括号中将数组元素用逗号隔开即可。
var fruit = ["apple","orange"];//两个数值的数组
var number =[1,2,true,"abc"];//不同类型的元素
数组值不一定要是常量,可以是任意表达式,也可以包含对象或者其他的数组,
var numbers = [1,2,3,a+1,a+2];
var a =[[2,{x:2,y:3}],[3,{x:4,y:5}]];
调用构造函数Array()是创建数组的另一种方法,可以用以下三种方式调用构造函数:
(1) 调用时没有参数。
var data = new Array();
该形式创建一个没有任何元素的空数组,等同于数组直接量[]。
(2)调用时有一个数值参数,它指定长度。
var data = new Array(5)
指定数组的长度,用来预分配一个数组空间。注意,数组中没有存储值,甚至数组的索引属性还未定义。
(3)显示指定两个或多个数组元素或者数组的一个非数值元素。
var data = new Array(1,2,3,"hello","world");
2.1、数组元素的添加和删除
(1)添加
test[0] = "a";
test[2] = "b";
也可以使用push()方法在数组末尾增加一个或多个元素,
test.push("c");
test.push("d","f");
使用push()方法在数组尾部压入一个元素与给数组test[test.length]赋值是一样的。可以使用unshift()方法在数组的首部插入一个元素,并且将其他元素依次移动到更高的索引处。
(2)删除
可以使用delate运算符来删除数组元素,
delate test[1];
使用delate不会修改数组的length属性;可以使用length属性重新设置数组的长度删除数组尾部的元素。数组还有pop()方法(和push一起使用),后者一次使长度减少1并返回被删除元素的值。还有一个shift()方法(和unshift一起使用),从数组头部删除一个元素。
fruits.pop(); //fruits结果输出:banana,orange,apple
var fruits=["banana","orange","apple","mango"];
fruits.shift(); //fruits结果输出:orange,apple,mango
2.2、多维数组
a[0]=[];//(0,0)(0,1)(0,2)
a[1]=[];//(1,0)(1,1)(1,2)
a[2]=[];//(2,0)(2,1)(2,2)
2.3、数组方法
(1)join()
Array.join()方法将数组中的所有元素都转化为字符串并连接在一起,返回最后生成的字符串。
console.log(arr.join());//打印出1,2,3
console.log(arr.join("-"));//1-2-3
console.log(arr);//[1,2,3](原数组不变)
(2)reverse()
Array.reverse()方法将数组中的元素颠倒顺序,返回逆序的数组。
console.log(arr.reverse());//[3,51,24,13]
(3)sort()
Array.sort()方法将数组中的元素排序并返回排序后的数组。
(4)concat()
Array.concat()方法创建并返回一个新数组,它的元素包括调用concat()的原始数组的元素和concat()的每个参数。
var arrCopy=arr.concat(9,[11,13]);
console.log(arrCopy);//[1,3,5,7,9,11,13]
//
var arrCopy2=arr.concat([9,[11,13]]);
cinsole.log(arrCopy2);//[1,3,5,7,9,Array[2]]
cinsole.log(arrCopy2[5]);//[11,13]
(5)slice()
Array.slice()方法返回指定数组的一个片段或者子数组。
var arrCopy=arr.slice(1);
var arrCopy2=arr.slice(1,4);
console.log(arrCopy);//[3,5,7,9,11]
console.log(arrCopy);//[3,5,7]
(6)splice()
Array.splice()方法是数组中插入或者删除元素的通用方法。
splice()方法的第一个参数指定了插入或者删除的起始位置。第二个参数指定了因该从数组
中删除的元素个数。如果省略第二个参数,则从起始点开始到数组结尾的所有元素所有元素都将被删除。splice()返回一个有删除元素组成的数组,或者如果没有 删除元素就返回一个空数组。
(7)push()和pop()
push():可以接收任意数量的参数,把他们逐个添加到到数组末尾,并返回修改后数组的长度。
pop():数组末尾移除最后一项,减少数组length值,然后返回移除项。
var count = arr.push("d","e");
console.log(count);//5
console.log(arr);//["a","b","c","d","e"]
var item=arr.pop();
console.log(item);//e
console.log(arr);//["a","b","c","d"]
(8)shift()和unshift()
shift():删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined。
unshift():将参数添加到原始数组开头,并返回数组的长度。
(9)toString()
(10)indexOf和lastIndexOf()
indexOf():接收两个参数,既要查找的项和(可选的)表示查找起点位置的索引。
lastIndxOf():接收两个参数,即要查找的项和(可选的)表示查找起点位置的索引。
console.log(arr.indexOf(5));//2
console.log(arr.lastIndexOf(5));//5
console.log(arr.indexOf(5,2));//2
console.log(arr.lastIndexOf(5,4))//2
console.log(arr,indexOf("5"));//-1
(11)forEach()
forEach():对数组进行遍历循环,为每个元素调用指定的函数。
arr.forEach(function(x,index,a){
console.log(x+'|'+index+'|'+(a===arr));
});
//输出是:
//1|0|true
//2|1|true
//3|2|true
//4|3|true
//5|4|true
(12)map()
map():指映射,对数组中的每一项 运行给定函数,返回每次函数调用的结果组成的数组。
var arr2=arr.map(function(item){
return item*item;
});
console.log(arr2);//[1,4,9,16,25]
(13)filter()
filter(): 过滤功能,数组中的每一项运行给定函数,返回满足条件组成的数组。
var arr2=arr.filter(function(x){
return x<10;
});
console.log(arr2);//true
var arr3=arr.filter(function(x){
return x<3;
});
console.log(arr3);//false
(14)some()
some:判断数组中是否存在满足条件的项,只要一项满足条件,就会返回true。
var arr2=arr.some(function(x){
return x<3;
});
console.log(arr2);//true
var arr3=arr.some(function(x){
return x<1;
});
console.log(arr3);//false
(15)reduce()和reduceRight()
reduce()方法从数组的第一项开始,逐个遍历到最后。而reduceRight()则从数组的最后一项开始,向前遍历到第一项。
var sum = values.reduceRight(function(prev,cur,index,array){
return prev+cur;
},10);
console.log(sum);