JavaScript日记(七)数组和函数的方法

使用字面量创建数组:

var arr=[1,true,"hello",4,5,10];  //可以在创建时指定数组元素,数组中的元素可以是任意数据类型
var arr2=new Array(10,20,30);  //使用构造函数创建数组也可以同时添加元素
arr=10;  //数组中只有一个元素10
arr2=new Array(10);  //数组长度为10
arr=[[2,3],[4,5]];  //二维数组

数组的常用方法:

1.push(),向数组末尾添加一个或多个元素,并返回数组新的长度,可以将要添加的元素作为方法的参数传递,这样元素会自动添加到数组末尾

var arr=[1,2,3];
var result=arr.push(4,5,6);
console.log(result);  //运行结果:6

2.pop(),该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回

var arr=[1,2,3];
var result=arr.pop();
console.log(result);  //运行结果:3

3.unshift(),向数组开头添加一个或多个元素,并返回新的数组长度,向前面插入元素后,其他元素的索引会依次调整

4.shift(),删除数组的第一个元素,并将被删除的元素作为返回值返回

数组的遍历:

var arr=[1,2,3,4,5,6];
for(var i=0;i<arr.length;i++){
    console.log(arr[i]);
}

JS中的forEach()方法也可以遍历数组,但它只支持IE8(不包含)以上的浏览器,此方法需要一个函数作为参数(这种由我们创建但不由我们调用的函数称为回调函数),数组中有几个元素就会执行几次,每次执行时,浏览器会将遍历到的元素以实参的形式传递进来。浏览器会在回调函数中传递三个参数:1.当前遍历的元素,2.当前遍历元素的索引,3.正在遍历的数组

var arr=[1,2,3,4,5,6];
arr.forEach(function(value,index,obj){
    console.log(arr);
});

slice(),从数组中提取指定元素,有截取开始位置的索引(包含)和截取结束位置的索引(不包含)两个参数,第二个参数可以省略不写,此时截取从开始索引往后的所有元素,索引可以传递一个负值,表示从后往前计算(例如-1表示倒数第一个元素)。该方法不会截取原数组,而是将截取到的元素封装到一个新数组中返回

var arr=[1,2,3,4,5,6];
var result=arr.slice(1,-2);
console.log(result);  //运行结果:2,3,4

splice(),此方法会影响原数组,将指定元素从原数组中删除,并将被删除的元素作为返回值返回,还可以添加新的元素。传递三个参数,第一个表示开始位置的索引,第二个表示删除的数量,第三个及更多的参数可以传递一些新的元素,这些元素将会自动插入到开始位置索引前面

var arr=[1,2,3,4,5,6];
var result=arr.splice(0,2,9,8);
console.log(result);  //运行结果:1,2
//原数组:9,8,3,4,5,6

concat(),连接两个或更多的数组,并将新数组返回,该方法不会对原数组产生影响

var arr1=[1,2];
var arr2=[3,4];
var arr3=[5,6];
var result=arr1.concat(arr2,arr3,9,8);
console.log(result);  //运行结果:1,2,3,4,5,6,9,8

join(),将数组转换为字符串,不会对原数组产生影响。在join()中可以指定一个字符串作为参数,这个字符串将会成为数组中元素的连接符,如果不指定连接符,则默认是“,”

var arr=[1,2,3,4,5,6];
result=arr.join("x");
console.log(result);  //运行结果:1x2x3x4x5x6

reverse(),反转数组,此方法会直接修改原数组

var arr=[1,2,3,4,5,6];
arr.reverse();
console.log(arr);  //运行结果:6,5,4,3,2,1

sort(),对数组中的元素进行排序,会影响原数组,默认按照Unicode编码进行排序。

var arr=[d,a,c,b,e];
arr.sort();
console.log(arr);  //运行结果:a,b,c,d,e
var arr1=[2,3,5,11,4];
arr1.sort();
console.log(arr1);  //运行结果:11,2,3,4,5

我们也可以自己定义排序的规则:在sort()中添加一个回调函数来指定排序规则,回调函数中需要定义两个形参,浏览器会分别使用数组中的元素作为实参去调用回调函数。浏览器根据回调函数的返回值来决定元素的顺序:返回值>0,元素交换位置;返回值<0,元素位置不变;返回值=0,认为两个元素相等,位置也不变

var arr=[2,3,5,11,4];  //升序排列
arr.sort(function(a,b){
/*if(a>b){
    return 1;
}else if(a<b){
    return -1;
}else{
    return 0;
}*/
return a-b;
});
console.log(arr);  //运行结果:2,3,4,5,11

函数的方法:

call()和apply(),都是函数对象的方法,需要通过函数对象调用,当对函数调用call()和apply()时都会执行函数。在调用call()和apply()时可以将一个对象指定为第一个参数,此时这个对象将会成为函数执行时的this。call()方法可以将实参在对象之后依次传递;apply()方法需要将实参封装到一个数组中统一传递。

function fun(a,b){
    console.log(a);
    console.log(b);
}
var obj={
    name:"obj",
    sayName:function(){
        alert(this.name);
    }
};
fun.call(obj,2,3);  //输出2,3
fun.apply(obj,[2,3]);  //输出2,3

callback:

1.以函数形式调用,this是window

2.以方法的形式调用,this是调用方法的对象

3.以构造函数的形式调用,this就是新创建的那个对象

4.使用call()和apply()调用时,this是指定的对象

arguments:

在调用函数时,浏览器每次都会传递进两个隐含的参数:
1.函数的上下文对象

2.封装实参的对象arguments

arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度。在调用函数时,我们所传递的实参都会在arguments中保存,arguments.length可以用来获取实参的长度。我们即使不定义形参,也可以通过arguments来使用实参:arguments[0]表示第一个参数,arguments[1]表示第二个参数。此对象有一个属性callee,这个属性对应一个函数对象,就是当前正在执行的函数的对象

function fun(){
    console.log(arguments.length);
}
fun("hello",3);  //运行结果:2

(作者观看的学习视频:B站尚硅谷)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值