JavaScript基础知识补习(4)

数组方法的补充
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,
* 这个属性对应一个函数对象,就是当前正在指向的函数的对象

猜你喜欢

转载自blog.csdn.net/qq_39317423/article/details/81810058