华清远见重庆中心—JS个人总结

数据类型

        八大数据类型:

                Boolean:改类型数据用于描述对错真假,只有两个值 true 真 false 假。

                null:空类型唯一的值就是 null,null 的含义: 用来代表对象类型的空引用(空指针)。

                undefined:undefined 未定义类型, 一个变量声明后不赋值,则他的值为 undefined,未定义类型中只有一个值叫做 undefined。

                number:数字类型,代表数字。

                string:字符串类型,许多字符组成的字符串。

                symbol:专用来创建类中的匿名属性或函数。

                object:对象类型,代表数据的集合。

                bigint:长整型,用来描述一个非常长的整型数字。

        判断数据类型的方法:

                typeof()长用此函数来判断一个数据的类型。

数组的操作

        push: 为数组末尾添加一个数据。(可以批量添加)

        pop:为数组末尾删除一个数据。

        unshift:为数组头部添加一个数据。(可以批量删除)

        shift:为数组头部删除一个数据。

        splice:splice 删除指定位置的成员,并用新成员替换,或插入新成员到指定成员的前面。第一个参数:删除成员的起始位置,第二个参数:删除成员的个数,第三个参数:用于替换被删除成员的新数据,该参数可以省略。在指定成员前追加新数据若第二个参数为0,则可以实现在指定位置的前面添加成员的功能。

        concat:连接数组,将多个数组连接在一起,大多时候用来克隆数组。

        join:让数组成员以一个字符连接起来。

        includes:判断数组是否包含某个成员。

        indexof:查找指定成员的索引。(lastindexof 查询最后一个指定成员的索引)

        slice:数组切片 获取子数组。

字符串操作

        计算字符串的长度:字符串可以看成一个数组可以计算长度,str.length。

        通过索引查看字符串下的字符:例如:str[3]。

        split:分割字符串,用于分割字符串,返回一个字符数组。。

        split+join:先分割在连接成新的字符串。

        trim:去掉字符串首尾空格。

        substring:截取字符串的部分,第一个参数为起始索引位置,第二个参数为结束索引位置,遵循前截后不截。

        indexof:查找字符在字符串中的索引。(lastindexof:找出最后一个该字符的索引。)

        startwith:判断字符串是不是以什么开头。

        endwith:判断字符串是不是以什么结尾。

        touppercase tolowercase:转化为全大写或全小写。

闭包

         函数被嵌套包裹,并且该函数被返回,这个现象称作为闭包。

         1. 假设有一个函数A

         2. A内声明变量B

         3. A返回一个 包含函数的内容

         4. A返回的 包含的函数必须引用变量B

         5. 此时函数A就是闭包的

    const demo = (function A() {
        let B = '张三'
        return () => {
            // 函数内引用变量B 则函数A是闭包的
            console.log(B)
        }
        // 当返回一个值时 函数A将返回 A中没被使用的变量将被垃圾回收掉,则A不是闭包的
        // return 'hello world'
        // 当返回的是直接声明的对象或数组的时候,声明时将B作为对象属性的值或数组成员传入对象或数组
        // 当A返回后,变量B则没有再被引用了,则被垃圾回收掉,A不是闭包的
        // return { name: B }
    })()

    // 使用自调用函数,返回一个函数
    const sayMessage = (() => {
        // 声明一个用于记录调用次数的变量
        // 闭包的函数空间内声明的变量,在内存中将持续存在
        // 垃圾回收不会回收该变量
        // 该变量在外部无法访问
        let count = 0

        // 在自调用函数中返回一个函数
        // 返回的函数就是一个闭包后的函数
        return (msg) => {
            console.log(msg)
            count++
            console.log(`sayMessage 调用次数为 ${count}`);
        }
    })()

    sayMessage('hello world')

 计时器

        什么是计时器?当经过指定时间后触发一段代码的函数就是一个计时器。

    声明一个计时器:setTimeout
    第一个参数:计时器计时结束后触发的函数
    第二个参数:计时时长,单位:毫秒
    返回值: 计时器id
    计时器id 用于停止计时
    let timerId = setTimeout(() => {
        console.log('hello setTimeout')
    }, 3000)

    document.querySelector('.btn1').addEventListener('click', () => {
        // clearTimeout 清空计时器
        // 参数是 计时器id
        // 清空后计时器将取消掉
        clearTimeout(timerId)
    })

           setInterval 循环计时函数

    setInterval 函数,每次经过指定时间,触发一次指定的函数
    参数和返回值 与 setTimeout 相同
    let count = 0
    let timerId2 = setInterval(() => {
        count++
        console.log(count);
    }, 1000)

    clearInterval
    document.querySelector('.btn2').addEventListener('click', () => {
        // 清空循环计时器
        clearInterval(timerId2)
    })

 渐入渐出动画

        

<script>
    const img = document.querySelector('img')

    let timerId

    // 绑定鼠标移入移出事件

    // 进入事件
    img.addEventListener('mouseenter', () => {
        console.log('enter');
        clearInterval(timerId)
        timerId = setOpacity(img, Number(img.style.opacity), -0.01, 100)
    })

    // 离开事件
    img.addEventListener('mouseleave', () => {
        console.log('leave')
        clearInterval(timerId)
        timerId = setOpacity(img, Number(img.style.opacity), 0.01, 100)
    })


    // img.addEventListener('mouseover', () => {
    //     console.log('over');
    // })

    // img.addEventListener('mouseout', () => {
    //     console.log('out')
    // })

    // 设置透明度
    // el: 用来修改透明度的元素
    // start: 透明动画播放时的初始值
    // v: 透明度的变化速度
    // duration: 计时器的间隔时间
    function setOpacity(el, start, v, duration) {
        // 当前透明度
        let current = start
        // 计时器运行前先赋值一个初始透明度
        el.style.opactiy = current

        let timerId = setInterval(() => {
            // 先计算动画逻辑
            current += v

            // 判断是否透明度已经到了极限值
            // if (current <= 0) {
            if ((v < 0 && current <= 0) || (v > 0 && current >= 1)) {
                // 停止计时器
                clearInterval(timerId)
                // 赋值current为极限值
                current = v < 0 ? 0 : 1
            }

            // 后赋值
            el.style.opacity = current
        }, duration)

        // 返回一个计时器id 方便随时停止计时器
        return timerId
    }

防抖  

         函数将在一个固定时间后被调用,若计时未完成又执行该函数,则取消上次计时,重新开始计时。

         用于限制频繁的网络请求,例如:搜索功能,用户停止输入的一段时间后才会执行搜索任务。

 const fd = (() => {
        // 计时器id
        let timerId
        return () => {
            // 取消计时
            clearTimeout(timerId)
            // 重新计时
            timerId = setTimeout(() => {
                // 计时完成后要执行的代码 写在此处
                console.log('hello world');
            }, 3000)
        }
    })()

    console.log(fd);

 封装防抖函数。

 这样任何函数都能被添加防抖功能。

 定义一个函数来封装防抖。

 fn: 要添加防抖的函数。

 delay: 防抖延迟多久。

 that: 防抖函数内的 this 指代。

    function fdPlus(fn, delay, that) {
        let timerId
        return function () {
            // 清除计时器
            clearTimeout(timerId)
            // 重新计时
            timerId = setTimeout(() => {
                // 调用参数fn函数
                // 将当前函数的参数 arguments 作为 fn 的参数传入进去
                fn.apply(that, arguments)
            }, delay)
        }
    }

节流

       固定时间内只能调用一次的函数,可以使用时间戳或计时器的方式实现。

       作用同样是限制用户频繁的网络请求,例如:发送验证码。

        

   function jlTimer() {
        // 计时器id
        let timerId
        let cd = 3000
        return () => {
            // 若已经开始计时 则timerId 存在
            if (timerId) return

            // 执行被节流的函数内容
            console.log('hello 节流');

            // 开始计时
            timerId = setTimeout(() => {
                // 清空计时器id 允许再次调用
                timerId = undefined
            }, cd)
        }
    }

      定义一个函数来封装节流。

       fn: 要添加防抖的函数。

       delay: 节流的cd。

       that: 节流函数内的 this 指代。

    function jlPlus(fn, delay, that) {
        // 计时器id
        let timerId
        return function () {
            if (timerId) return

            // 执行节流的代码
            fn.apply(that, arguments)

            // 计时
            timerId = setTimeout(() => {
                timerId = undefined
            }, delay)
        }
    }

  

        

                

                

                

                

                

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值