数组方法的补充
3中也有一些数组的方法介绍,回顾一下
我们首先创建一个数组(唯一的学习快落了QWQ)
var arr = ["白宇","赵云澜"];
var arr2 = ["朱一龙","沈巍"];
concat()
* 可以连接两个或多个数组并将新的数组返回
* 该方法不会对原数组产生影响
var result = arr.concat(arr2,"镇魂");
console.log("result = " + result); //result = 白宇,赵云澜,朱一龙,沈巍,镇魂
join()
* -该方法可以将数组转换成为一个字符串
* -该方法不会对原数组产生影响,而是将转换后的字符串作为结果返回
* -在join()中可以指定一个字符串 作为参数,这个字符串将会成为数组中元素的连接符
result1 = arr.join();
console.log(typeof arr); //object
console.log(typeof result1); //string
result2 = arr.join();//括号里可以填字符串,空串表示不填,就是""
console.log(result2);//白宇,赵云澜 [这种情况直接用逗号连接]
reverse()
* - 该方法用来反转数组
* - 影响原数组
arr.reverse();
console.log(arr);
sort() 数组排序
* -默认按照Unicode编码进行排序
* -对于纯数字数组进行排序,也会按照Unicode编码排序,结果可能错误
arr3 = [2,4,1,5,7,3];
arr4 = [11,4,1,5,7,3];
arr3.sort();
console.log(arr3); //1,2,3,4,5,7
arr4.sort(); //按照Unicode编码排序,结果可能错误
console.log(arr4); //1,11,3,4,5,7 嗝 错了叭
所以我们要自己来制定规则:
* 在sort中添加一个回调函数,来制定排序规则
* 回调函数中需要定义两个形参。
* 浏览器会分别使用数组中的元素作为实参去调用回调参数(函数由我们创建但是不是由我们调用,称为回调函数)
* 使用哪个元素调用不确定,但是肯定的是在数组中a一定在b前面
* -浏览器会根据回调函数的返回值来觉得元素的顺序
* 若 a 小于 b,则返回一个小于 0 的值。
* 若 a 等于 b,则返回 0。
* 若 a 大于 b,则返回一个大于 0 的值。
*
* - 如果需要升序 a-b 反之 b-a
arr5 = [5,4];
arr5.sort(function(a,b){
return a-b
})
console.log(arr5);
call()和apply()
* - 这两个方法都是函数对象的方法,需要通过函数对象来调用
* - 当对函数调用call()和apply()都会调用函数执行
* - 在调用call()和apply()可以将一个对象指定为第一个参数
* 此时这个对象将会成为函数执行时的this
* - call()方法可以将实参在对象之后依次传递
* - apply()方法需要将实参封装到一个数组中统一传递
*
* - this的情况:
* 1.以函数形式调用时,this永远都是window
* 2.以方法的形式调用时,this是调用方法的对象
* 3.以构造函数的形式调用时,this是新创建的那个对象
* 4.使用call和apply调用时,this是指定的那个对象
(什么玩意 ?????太抽象了叭 我就听懂了this那个指定····)
arguments
在调用函数时,浏览器每次都会传递进两个隐含的参数:
* 1.函数的上下文对象 this
* 2.封装实参的对象 arguments
* - arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度
* - 在调用函数时,我们所传递的实参都会在arguments中保存
* - arguments.length可以用来获取实参的长度
* - 我们即使不定义形参,也可以通过arguments来使用实参,
* 只不过比较麻烦
* arguments[0] 表示第一个实参
* arguments[1] 表示第二个实参 。。。
* - 它里边有一个属性叫做callee,
* 这个属性对应一个函数对象,就是当前正在指向的函数的对象