js高阶day03

本文详细解释了JavaScript中改变函数this指向的call(),apply(),和bind()方法,以及定时器传参问题和数组的常见操作如forEach(),map(),filter(),find(),some(),every(),和reduce()。
摘要由CSDN通过智能技术生成

改变this指向

// call():使用一个指定的 `this` 值调用一个函数

        // (简单理解为调用函数的方式,但是它可以改变函数的 this 指向)

// ①call会立即调用函数

 // ②参数传递的方式是以逗号隔开

 // ③可以改变this指向

function sum(a, b) {
            console.log(this);
            console.log(a + b);
            console.log(this.age + a + b);
        }
sum.call(obj, 200, 200);

// ①apply会立即调用函数

// ②传入参数是以数组形式

// ③改变this指向

function sum(a, b) {
            console.log(this);
            // console.log(a + b);
            console.log(this.age + a + b);
        }
sum.apply(obj, [65, 78])

// 在这一行bind只是把sum函数内部的this指向改变了

        // 并没有直接调用sum

// ①bind不会立即调用 需要手动调用

// ②传入参数以逗号隔开

// ③改变this指向

function sum(a, b) {
            console.log(this);
            // console.log(a + b);
            console.log(this.age + a + b);
        }
var rel = sum.bind(obj, 45, 60);
        console.log(rel);

定时器传参

var k = 100;
        setTimeout("fun(k)", 2000);

        function fun(i) {
            console.log(k);
        }

        setTimeout(function () {
        }, 1000)

        // for (var i = 0; i < 10; i++) {
        //     console.log(i);
        // }

        // 解决定时器不能传参的问题
        // 在外部封装函数 写在定时器方法里面进行调用
        // 注意:要用引号将函数包括

js高阶中数组的常用的操作方法

● arr.forEach(function(){}):遍历数组

var arr = [1, 2, 3, 5, 6, 7, 89];

        // 遍历数组
        var rel = arr.forEach(function (value, index, arr) {
            // value当前元素
            // index元素的索引
            // arr当前数组
            console.log(value + "-----" + index);
            console.log(arr);

            return "操作元素" + value
        })
        console.log(rel);
        // undefined
        // forEach没有返回值

        // function fun() {
        //     arguments.forEach(function (v) {
        //         console.log(v);
        //     })
        // }
        // fun(1, 2, 3, 4, 5, 65, 6, 7)


● arr.map(function(){}):对数组遍历并操作数组元素,返回操作后元素组成的新数组

 var arr = [1, 2, 3, 5, 6, 7, 89];

        // 遍历数组
        var rel = arr.map(function (value, index, arr) {
            // value当前元素
            // index元素的索引
            // arr当前数组
            console.log(value + "-----" + index);
            console.log(arr);

            return "操作元素" + value
        })
        console.log(rel);
        console.log(arr);
        // map 具有返回值
        // 注意:map() 不会对空数组进行检测, map() 不会改变原始数组。

● arr.filter(function({}));对数组元素进行过滤,返回符合元素组成的新数组

 // filter 过滤 方法创建一个数组,将满足条件的元素添加到新数组中返回
        var rel = arr.filter(function (value, index, arr) {
            // value当前元素
            // index元素的索引
            // arr当前数组
            console.log(value);

            // 具有返回值
            return value > 50
        })

● arr.find(function){})方法返回符合查找条件的第一个数组元素的值。

var arr = [56, 32, 78, 11, 23, 103, 45, 103];
        // find() 方法返回通过测试(函数内判断)的数组的第一个元素的值。
        // find() 方法为数组中的每个元素都调用一次函数执行:
        // 如果没有符合条件的元素返回 undefined
        var rel = arr.find(function (v) {
            console.log("执行");
            return v > 100
        })
        console.log(rel);

● arr.some(function){}):对数组的元素进行判断是否有符合的元素

var arr = [56, 32, 78, 11, 23, 103, 45, 103];
        // some 查找数组中是否有满足条件的元素 ,如果数组中有元素满足条件返回 true,否则返回 false。
        var rel = arr.some(function (v) {

            return v > 100
        })
        console.log(rel);

● arr.every(function){}):对数组的元素进行判断是否全部符合

 var arr = [56, 32, 78, 11, 23, 103, 45, 103];
        // every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
        var rel = arr.every(function (v) {
            console.log("zhixing");
            return v < 100
            // 如果数组中检测到有一个元素不满足,则整个表达式返回false,且剩余的元素不会再进行检测。
            // 所有元素都满足条件 才会返回true
        })
        console.log(rel);


● arr.reduce(function(total,value,index,array){},initialValue):方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

 // reduce方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
        // array.reduce(function (total, value, index, array) {
        // - total 必需。初始值, 或者计算结束后的返回值。
        //   value 必需。当前元素 
        //   index 可选。当前元素的索引 
        //   array可选。当前元素所属的数组对象。 
        // - initialValue 作为第一次调用 `callback`函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。
        // }, initialValue)


        // 求和
        var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        var rel1 = arr.reduce(function (total, value) {
            // console.log(total);
            // console.log(value);
            return total + value
        })
        console.log(rel1);


        // 求最大值
        var arr2 = [45, 67, 12, 2, 103, 44, 33];
        var rel2 = arr2.reduce(function (total, value) {
            // if (total < value) {
            //     total = value;
            // }
            return Math.max(total, value);
        })
        console.log(rel2);



        // 数组去重
        // splice  push()
        var arr3 = [44, 65, 44, 12, 3, 2, 5, 2, 16];
        var rel3 = arr3.reduce(function (total, value, index) {
            // []
            if (!total.includes(value)) {
                total.push(value);
            }
            return total;
        }, [])
        console.log(rel3);


        arr3.sort(function (a, b) {
            return a - b;
        })
        console.log(arr3);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值