怎么理解这段代码?

[...Array(7).keys()].map(days => new Date(Date.now() + 86400000 * days));

已经尝试过:
https://www.cnblogs.com/1024h...
还是没解决的问题:
自己太菜了,没有理解到这段代码的意思,
1 Date.now() + 86400000 * days 这个的意思是什么? days不是还没赋值吗?

2 days => new Date(Date.now() + 86400000 * days) 上个问题中,days还没赋值,为什么能够赋值给这个问题中的days(左边的days)?

阅读 3.9k
3 个回答

源代码:[...Array(7).keys()].map(days => new Date(Date.now() + 86400000 * days));

拆一遍就什么都明白了。

<script>
Array(7)              // 创建一个长度7的数组
Array(7).keys()       // 返回这个数组所有索引键,即 0,1,2,3,4,5,6
                      // 但并不是一个包含所有键的数组,而是一个 Array Iterator 对象
[...Array(7).keys()]  // 所以这里将其转换成只有键的数组 [0,1,2,3,4,5,6]
                      // 使用的是展开语法(Spread syntax)
.map()                // map 方法,依次处理数组元素
.map(days => new Date(Date.now() + 86400000 * days))
                      // 箭头函数,或者叫 Lambda 表达式
                      // 相当于,这么一看你知道 days 是怎么来的了吧
.map(function(days){
    return new Date(Date.now() + 86400000 * days
})
</script>

说白了,就是将 new Date(Date.now() + 86400000 * x) 循环七次并写入同一个数组,x从0到6递增。

  1. Date.now() 当前时间,加上 86400000 * days 即当前时间点顺延 days 天;
  2. 左边的 days 是变量名,它的值是由 map 函数赋予的,具体请搜索 lambda 表达式
  3. [...Array(7).keys()] 会产生 [0, 1, 2, 3, 4, 5, 6],其中:

    • Array(7) 创建长度为 7 的空数组
    • .keys() 即获取前面空数组的键
    • ... 请搜索 js 展开语法
  4. 整体上,这个代码的意思就是,将此时此刻作为一个长度为 7 的数组的首项,后面六项即 明天此时、后天此时... 以此类推。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏