引用类型的值(对象)是引用类型的一个实例,在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起。它也常被称为类,但这种称呼并不妥当
Object类型
没有什么好介绍的
Array类型
检测数组
es6最终解决办法是Array.isArray(),就是用来确定是不是数组的,比instanceof()更加好用,不会出现因为执行环境 的不同而导致的判断失误。
转换方法
所有对象都有toLocaleString(),toString(),valueOf(),方法,其中调用数组的toString()方法会返回数组中每个值的字符串形式拼接而成以一个逗号隔间的字符串,而调用valueOf()返回的还是数组。
数组继承的toLocaleString()、toString()和valueOf()方法,在默认情况下都会以逗号分隔的字符串的形式返回数组项。而如果使用join()方法,则可以使用不同的分隔符来构建这个字符串。join()方法只接收一个参数,即用作分隔符的字符串,然后返回包含所有数组项的字符串。请看下面的例子:
var colors = ["red", "green", "blue"];
alert(colors.join(",")); //red,green,blue
alert(colors.join("||")); //red||green||blue
栈方法
使用push和pop方法来实现类似栈的行为;
push方法接受任意参数,把它们逐个添加到末尾,并返回修改后的数组的长度,
pop方法则是从数组末尾移除最后一项,减少length的长度,返回被移除的项。
队列方法
栈数据结构的访问规则是(后进先出)
而队列数据结构的访问规则是(先进先出)。
所以队列方法就是:队列在列表的末端添加项,从列表的前端移除项。
由于push()是向数组末端添加项的方法,实现这一操作的数组方法就是shift(),它能够移除数组中的第一个项并返回该项,同时将数组长度减1。结合使用shift()和push()方法,可以像使用队列一样使用数组。
重排序方法
数组中已经存在两个可以直接用来重排序的方法:reverse()和sort()。
reverse() 反转数组项的顺序
var values=[{1,2,3,4,5}]
values.reverse();
alert(values) // 5,4,3,2,1
sort()
var values=[{1,2,15,10,25}]
values.sort();
alert(values) //1,10,15,2,25
sort还可以接受一个函数作为对比,例如:
function compare(val1,val2){
if(val1<val2){
return -1;
}else if ( val1>val2){
return 1;
}else{
return 0;
}
}
var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values); //0,1,5,10,15
还可以调节-1和1的位置,就可以实现升序还是降序排序。
如果对于数值类型,或者valueOf ()方法会返回数值类型的对象类型,可以使用更简单比较函数,如下
function compare (val1 ,val2){
return val1-val2
}
操作方法
concat() 数组拼接
var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["black", "brown"]);
alert(colors); //red,green,blue
alert(colors2); //red,green,blue,yellow,black,brown
数组强大的方法slice()
1、slice()接受两个参数时,就是要返回项的起始和结束位置。(不包括结束位置)
2、只有一个参数的时候,返回从该参数从指定位置到数组末尾的所有项。
var colors = ["red", "green", "blue", "yellow", "purple"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
alert(colors2); //green,blue,yellow,purple
alert(colors3); //green,blue,yellow
当传入参数是负数时,则是使用数组长度加上参数值,即一个长度为5的数组,slice(-2 ,-1)与调用slice(3,4)效果是一样的
接下来介绍数组最最最最强大的方法splice()
他的主要用途就是向数组中插入项。主要是三种方法:
删除 :给两个参数,第一个参数是要删除第一项 的位置,和要删除的项数。例如:splice(0,3)要删除数组的前三项。
插入:最少三个参数。第一个参数是起始位置,第二个是0(要删除的项数),第三个就是要插入的项,如果要插入的项数很多,就在后面直接增加项数就可以。
替换:splice(2,1,"red","green")会删除当前数组位置2的项,然后再从位置2开始插入字符串"red"和"green"。
位置方法
indexOf()和lastIndexOf(),都接受两个参数,要查找的项和(可选的)表示查找起点位置的索引。其中,indexOf()方法从数组的开头(位置0)开始向后查找lastIndexOf()方法则从数组的末尾开始向前查找。
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
var person = { name: "Nicholas" };
var people = [{ name: "Nicholas" }];
var morePeople = [person];
alert(people.indexOf(person)); //-1
alert(morePeople.indexOf(person)); //0
迭代方法
every() 对数组每一项运行给定的函数,如果该函数对每一项都返回true,则返回true.
filter() 对数组的每一项运行给定的函数,返回该函数会返回true的项组成的数组
forEach() 对数组的每一项运行给定函数,没有返回值
map() 对数组的每一项运行给定函数,返回每次函数调用的结果组成的数组
some()对数组的每一项运行给定函数,如果该函数对任意一项返回true,则返回true.
但是所有方法都不会修改数组的值。
自我理解map方法是返回原数组的全部结果,filter会过滤筛选
归并方法
reduce()从数组的第一项开始,逐个遍历到最后。而reduceRight()则从数组的最后一项开始,向前遍历到第一项。
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
return prev + cur;
});
alert(sum); //15
网友评论