2020-10-01 arguments数组问题 reduce方法问题 倒计时输出 字符串截取

  1. arguments

arguments并不是一个真正的数组,而是一个“类似数组(array-like)”的对象,因为arguments拥有一个length属性,但它缺少所有的数组方法。

并且,我们就算是接受到参数了,arguments还是会把所有的参数放在里面

在这里插入图片描述

  1. 为什么传过去i定时器定时输出1s还是会一下子全输出出来?

例如:

let arr = [1, 2, 2, 3]
    for(let i = 0;i < arr.length;++i) {
        setTimeout(() => {
          console.log(arr[i]);
        },1000)
    }

虽然输出1223,但是几乎是同时输出

这是因为for循环是主线程,执行完后再执行异步的setTimeout,此时每一次for循环里setTimout里的函数已经执行,但是都是延迟1s,所以会导致一下子全部输出。也就是说,定时器的执行机制并不会等上一个定时器的定时结束了再执行下一个定时器,而是都执行了。
举个例子:

console.log(1)
    async function han() {
      await console.log(2)
      setTimeout(() => {
        console.log(5)
      }, 1000)
    }
    async function test() {
      await console.log(3)
      setTimeout(() => {
        console.log(6)
      }, 1000)
    }
    han()
    test()
    console.log(4)
    //1 2 3 4 5 6  注意5和6是基本同时输出的

解决方法:

let arr = [1, 2, 2, 3]
    for(let i = 0;i < arr.length;++i) {
        setTimeout(() => {
          console.log(arr[i]);
        },i * 1000)
    }

都延迟倍数的秒数,这样即可实现当我们开始执行setTimeout的内容时,是延迟分别1s

  1. 字符串截取

substring():从某个位置截取到结束位置,如果第二个不写,则到末尾.包左且包右
slice():从某个位置截取到结束位置,如果第二个不写,则到末尾.包左但不包右
substr():从某个位置开始截取几个字符,如果第二个参数length不写,则到末尾

在这里插入图片描述
4. 今天写数组去重的时候发现一个问题

在这里插入图片描述

push不行,那我就试试concat

let arr = [1, 2, 2, 3, 3].reduce((pre, curr) => {
      console.log(pre, pre instanceof Array)
      return pre.includes(curr) ? pre : pre.concat(curr)
    }, [])
    console.log(arr)//[1,2,3]

发现竟然神奇的可以了!

这个原因我觉得是,pre作为过去的数据,是无法去更改的,不然有点乱套,而我们如果用的concat,他是非响应式的方法,会返回一个新数组return出去,所以应该是允许的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值