1. 30-seconds-of-code
该项目讲的是满足你所有开发需求的简短代码段,里面都是些经常会用到而且是非常经典的代码,非常值得学习!
比如 JavaScript 模块就分为了 All、Array、Browser、Date、Function、Math、Node、Object、String 方便学习的。
比如:你必须知道的 4 种 JavaScript 数组方法
Array.prototype.map()
const arr = [1, 2, 3]; const double = x => x * 2; arr.map(double); // [2, 4, 6]
Array.prototype.filter()
const arr = [1, 2, 3]; const isOdd = x => x % 2 === 1; arr.filter(isOdd); // [1, 3]
Array.prototype.reduce()
const arr = [1, 2, 3]; const sum = (x, y) => x + y; arr.reduce(sum, 0); // 6 const increment = (x, y) => [...x, x[x.length - 1] + y]; arr.reduce(increment, [0]); // [0, 1, 3, 6]
Array.prototype.find()
const arr = [1, 2, 3]; const isOdd = x => x % 2 === 1; arr.find(isOdd); // 1
又比如:如何在 JavaScript 中实现睡眠功能?
同步版本
const sleepSync = (ms) => { const end = new Date().getTime() + ms; while (new Date().getTime() < end) { /* do nothing */ } } const printNums = () => { console.log(1); sleepSync(500); console.log(2); console.log(3); }; printNums(); // Logs: 1, 2, 3 (2 and 3 log after 500ms)
异步版本
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); const printNums = async() => { console.log(1); await sleep(500); console.log(2); console.log(3); }; printNums(); // Logs: 1, 2, 3 (2 and 3 log after 500ms)
其实上面讲到的事例里面还提供 api 和方法的讲解的,方便读者能看懂的,这里就不写出来了。
还想学更多的 经典 js 代码片段,请看下面的仓库
https://github.com/30-seconds...
2. 33-js-concepts
JavaScript开发者应懂的 33 个概念
这个项目是为了帮助开发者掌握 JavaScript 概念而创立的。它不是必备,但在未来学习(JavaScript)中,可以作为一篇指南。
目录
调用堆栈 原始类型 值类型和引用类型 隐式, 显式, 名义和鸭子类型 == 与 ===, typeof 与 instanceof this, call, apply 和 bind 函数作用域, 块级作用域和词法作用域 闭包 map, reduce, filter 等高阶函数 表达式和语句 变量提升 Promise 立即执行函数, 模块化, 命名空间 递归 算法 数据结构 消息队列和事件循环 setTimeout, setInterval 和 requestAnimationFrame 继承, 多态和代码复用 按位操作符, 类数组对象和类型化数组 DOM 树和渲染过程 new 与构造函数, instanceof 与实例 原型继承与原型链 Object.create 和 Object.assign 工厂函数和类 设计模式 Memoization 纯函数, 函数副作用和状态变化 耗性能操作和时间复杂度 JavaScript 引擎 二进制, 十进制, 十六进制, 科学记数法 偏函数, 柯里化, Compose 和 Pipe 代码整洁之道
而且每个主题都包含了相关的精彩文章和视频,非常适合学习。
https://github.com/leonardoms...
3. javascript-questions
JavaScript 进阶问题列表。
从基础到高级:测试您对 JavaScript 的了解程度,稍微刷新一下知识或为编写代码面试做准备!
比如下面会输出是什么?
let a = 3 let b = new Number(3) let c = 3 console.log(a == b) console.log(a === b) console.log(b === c)
- A: true false true
- B: false false true
- C: true false false
- D: false true true
答案: C
解释:
new Number()
是一个内建的函数构造器。虽然它看着像是一个 number,但它实际上并不是一个真实的 number:它有一堆额外的功能并且它是一个对象。
当我们使用 ==
操作符时,它只会检查两者是否拥有相同的值。因为它们的值都是 3
,因此返回 true
。
然后,当我们使用 ===
操作符时,两者的值以及类型都应该是相同的。new Number()
是一个对象而不是 number,因此返回 false
。
https://github.com/lydiahalli...
4. JavaScript 30
使用原生 JavaScript 在 30 天内完成 30 个项目。
每天完成的 HTML, CSS 和 javascript 解决方案。
https://github.com/wesbos/JavaScript30
5. Codewars
和 leetcode 有点类似,也是在平台上和其他人一起完成真实的代码挑战,提升你的技术。
相比于其他平台,codewars 给出的问题更加贴合实际工作与生活,很多题都会给出题目背景,更有代入感。
可以提升技能:在社区创建的 kata 上挑战自我,以增强各种技能。掌握您当前选择的语言,或扩展您对新语言的理解。
要加入这个社区,您必须先答题证明自己的技能才可以的。
https://www.codewars.com/
6. ES6 入门教程
入门的前端都应该都知道的 ES6 开源书籍,猫哥初入前端时就是学了 阮一峰 老师开源的 ES6 内容的,一直实用至今!
《ECMAScript 6 入门教程》是一本开源的 JavaScript 语言教程,全面介绍 ECMAScript 6 新引入的语法特性。
本书覆盖 ES6 与上一个版本 ES5 的所有不同之处,对涉及的语法知识给予详细介绍,并给出大量简洁易懂的示例代码。
本书为中级难度,适合已经掌握 ES5 的读者,用来了解这门语言的最新发展;也可当作参考手册,查寻新增的语法点。
如果你是 JavaScript 语言的初学者,建议先学完《JavaScript 语言入门教程》,再来看这本书。
https://es6.ruanyifeng.com/