最近在学习js,将js中的数据类型及其常用方法做个整理:
1.基本类型
(1)js的基本数据类型:Undefined、Null、Boolean、Number、String
(2)基本数据类型按值传递。
(3)复制变量时,当从一个变量向另一个变量复制基本类型的值时,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。
2.引用类型
(1)引用类型的值是保存在内存中的对象。
(2)js不允许直接访问内存中的位置,也就是不能直接操作对象的内存空间。
(3)引用类型的值是按引用访问的。
(4)可以给引用类型的值动态添加属性。
(5)复制变量时,当从一个变量向另一个变量复制引用类型的值时,也会将存储在变量对象中的值复制一份放到为新变量分配的空间中,不同的是,这个值得副本实际上是一个指针,而这个指针指向存储在堆中得一个对象。复制操作结束后,两个变量实际上引用同一个对象。
备注:
a.函数传递参数时,是按值传递。无论是基本数据还是引用类型数据,在函数传参的时候被复制给另一个变量。若是引用类型数据,则将指向堆中的同一个地址的对象,若函数中的变量重新new,将不会影响外部参数。
b.检测数据类型,使用typeof
ex: if(typeof a == ‘string’){}
3.引用类型-----Array 类型
(1)同一数组中可以存储不同类型的数据
(2)数组大小可动态调整
(3)数组常用函数:
a.Array.isArray():检测数组,参数为被检测数据,返回值为true/false;
b.toString():返回由数组中每个值的字符串形式拼接而成的以逗号分隔的字符串;
c.valueOf():返回的还是数组;
d.toLocaleString():也会返回一个数组值的以逗号分隔的字符串,不同的是,取得数组中每一项得值调用的是每一项的toLocaleString()方法。
e.join():可以使用不同的符号构建转换后的数组字符串,参数为要转换后的分隔符。
(4)栈方法:
a.push():可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。
b.pop():从数组末尾移除最后一项,减少数组的length值,返回移除的项。
(5)队列方法:
a.shift():移除数组中的第一个项并返回该项,将数组长度减1。
b.unshift():在数组前端添加任意个项并返回数组的长度。
(6)重排序方法:
a.reverse():反转数组的顺序
b.sort():默认按升序排列数组项(原理:调用每个数组项的toString()方法,然后比较得到的字符串。)sort方法可以把函数作为参数传进去,进行比较。
比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数位于第二个之后,则返回一个正数。
(7)操作方法:
a.concat():基于现有数组中的所有项创建一个新数组,参数为0或多个,会将现有数组项与参数合并创建一个新数组。
b.slice():基于当前数组中的一个或多个项创建一个新数组。
var colors = [‘red’,‘green’,‘blue’,‘yellow’,‘purple’];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
alert(colors2); // green,blue,yellow,purple 从位置1开始复制
alert(colors3); // green,blue,yellow 从位置1开始复制,到位置3停止
如果slice()方法的参数中有一个负数,则用数组长度加上该数来确定相应的位置。例如:在一个包含5项的数组上调用slice(-2,-1),与调用slice(3,4)得到的结果相同。如果结束位置小于起始位置,则返回空数组。
c.splice():主要用途向数组中部插入项。splice方法始终返回一个数组,该数组中包含从原始数组中删除的项(若没有删除任何项,则返回一个空数组)。–删除,添加,替换
var colors = [‘red’,‘green’,‘blue’];
var removed = colors.splice(0,1); //从位置0开始删除,删除1项
alert(colors); // ‘green’,‘blue’
alert(removed); // ‘red’
removed = colors.splice(1,0,‘yellow’,‘orange’); // 从位置1开始插入两项
alert(colors); // ‘green’,‘yellow’,‘orange’,‘blue’
alert(removed); // 空数组
removed = colors.splice(1,1,‘red’,‘purple’); // 从位置1开始删除1项,插入两项
alert(colors); // ‘green’,‘red’,‘purple’,‘orange’,‘blue’
alert(removed); // ‘yellow’
(8)位置方法:
a.indexOf():从数组开头(位置0)开始向后查找,返回要查找的项在数组中的位置,没找到返回-1
b.lastIndexOf():从数组末尾开始向前查找,返回要查找的项在数组中的位置,没找到返回-1
(9)迭代方法:
a.every():对数组中每一项都运行给定函数,如果每一项都返回true,则返回true;
b.some():对数组中每一项都运行给定函数,如果任一项返回true,则返回true;
c.filter():对数组中每一项运行给定函数,返回该函数会返回true的项组成的数组;
d.forEach():对数组中每一项运行给定函数,该方法没有返回值;
e.map():对数组每一项运行给定函数,返回每次函数调用的结果组成的数组。
ex: var numbers = [1,2,3,4,5,4,3,2,1];
var mapResult = numbers.map(function(item,index,array){
return item*2;
});
alert(mapResult);//[2,4,6,8,10,8,6,4,2]
(10)缩小方法
a.reduce():从数组的第一项开始,逐个遍历到最后。
ex: var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,array){
return prev+cur;
});
alert(sum);//15
第一次执行回调函数,prev是1,cur是2。第二次,prev是3(1+2的结果),cur是3(数组的第三项)。
b.reduceRight():从数组的最后一项开始,逐个遍历到第一项。
ex: var values = [1,2,3,4,5];
var sum = values.reduceRight(function(prev,cur,index,array){
return prev+cur;
});
alert(sum);//15
第一次执行回调函数,prev是5,cur是4。第二次,prev是9(5+4的结果),cur是3(数组的倒数第三项)。