12 个 GitHub 上超火的 JavaScript 奇技淫巧项目,找到写 JavaScript 的灵感!

12,775 阅读9分钟

大家好,我是你们的 猫哥,一个不喜欢吃鱼、又不喜欢喵 的超级猫 ~

前言

猫哥是一个常年混迹在 GitHub 上的猫星人,所以发现了不少好的前端开源项目、常用技巧,在此分享给大家。

公众号:前端GitHub,专注于挖掘 GitHub 上优秀的前端开源项目,并以专题的形式推荐,每专题大概 10 个好项目,每周会有一到三篇精华文章推送。

已经推荐了 面试项目css奇技淫巧项目代码规范项目数据结构与算法项目管理后台模板前端必备在线工具 等专题的近 100 个优秀项目了。

平时如何发现好的开源项目,可以看看这篇文章:GitHub 上能挖矿的神仙技巧 - 如何发现优秀开源项目

以下为【前端GitHub】的第 12 期精华内容。


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 代码片段,请看下面的仓库

github.com/30-seconds/…

2. 33-js-concepts

JavaScript开发者应懂的 33 个概念

这个项目是为了帮助开发者掌握 JavaScript 概念而创立的。它不是必备,但在未来学习(JavaScript)中,可以作为一篇指南。

目录

调用堆栈
原始类型
值类型和引用类型
隐式, 显式, 名义和鸭子类型
== 与 ===, typeofinstanceof
this, call, apply 和 bind
函数作用域, 块级作用域和词法作用域
闭包
map, reduce, filter 等高阶函数
表达式和语句
变量提升
Promise
立即执行函数, 模块化, 命名空间
递归
算法
数据结构
消息队列和事件循环
setTimeout, setInterval 和 requestAnimationFrame
继承, 多态和代码复用
按位操作符, 类数组对象和类型化数组
DOM 树和渲染过程
new 与构造函数, instanceof 与实例
原型继承与原型链
Object.createObject.assign
工厂函数和类
设计模式
Memoization
纯函数, 函数副作用和状态变化
耗性能操作和时间复杂度
JavaScript 引擎
二进制, 十进制, 十六进制, 科学记数法
偏函数, 柯里化, ComposePipe
代码整洁之道

而且每个主题都包含了相关的精彩文章和视频,非常适合学习。

github.com/leonardomso…

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

github.com/lydiahallie…

4. JavaScript 30

使用原生 JavaScript 在 30 天内完成 30 个项目。

每天完成的 HTML, CSS 和 javascript 解决方案。

github.com/wesbos/Java…

5. Codewars

和 leetcode 有点类似,也是在平台上和其他人一起完成真实的代码挑战,提升你的技术。

相比于其他平台,codewars 给出的问题更加贴合实际工作与生活,很多题都会给出题目背景,更有代入感。

可以提升技能:在社区创建的 kata 上挑战自我,以增强各种技能。掌握您当前选择的语言,或扩展您对新语言的理解。

要加入这个社区,您必须先答题证明自己的技能才可以的。

www.codewars.com/

6. ES6 入门教程

入门的前端都应该都知道的 ES6 开源书籍,猫哥初入前端时就是学了 阮一峰 老师开源的 ES6 内容的,一直实用至今!

《ECMAScript 6 入门教程》是一本开源的 JavaScript 语言教程,全面介绍 ECMAScript 6 新引入的语法特性。

本书覆盖 ES6 与上一个版本 ES5 的所有不同之处,对涉及的语法知识给予详细介绍,并给出大量简洁易懂的示例代码。

本书为中级难度,适合已经掌握 ES5 的读者,用来了解这门语言的最新发展;也可当作参考手册,查寻新增的语法点。

如果你是 JavaScript 语言的初学者,建议先学完《JavaScript 语言入门教程》,再来看这本书。

es6.ruanyifeng.com/

7. JavaScript 教程

本教程全面介绍 JavaScript 核心语法,覆盖了 ES5 和 DOM 规范的所有内容。

也是 阮一峰 老师写的,真的非常通俗易懂,非常适合前端学习。

不得不说,知识掌握通透的人写的技术文章,非常能让人容易明白。

内容上从最简单的讲起,循序渐进、由浅入深,力求清晰易懂。

所有章节都带有大量的代码实例,便于理解和模仿,可以用到实际项目中,即学即用。

本教程适合初学者当作 JavaScript 语言入门教程,学完后就可以承担实际的网页开发工作,也适合当作日常使用的参考手册。

目录

入门篇
数据类型 
运算符 
语法专题
标准库
面向对象编程
异步操作 
DOM
事件
浏览器模型
附录:网页元素接口

wangdoc.com/javascript/

8. 现代 JavaScript 教程

以最新的 JavaScript 标准为基准。通过简单但足够详细的内容,为你讲解从基础到高阶的 JavaScript 相关知识。

课程的核心内容包含 2 部分,涵盖了 JavaScript 编程语言相关知识和浏览器行为。此外还有一系列的专题文章。

JavaScript 编程语言

在这儿我们将从头开始学习 JavaScript,也会学习 OOP 等相关高级概念。

本教程专注于语言本身,我们默认使用最小环境。

浏览器:文档,事件,接口

学习如何管理浏览器页面:添加元素,操纵元素的大小和位置,动态创建接口并与访问者互动。

其他文章

教程的前两部分未涉及的其他主题的内容列表。此处没有明确的层次结构,你可以按你需要的顺序阅读文章。

zh.javascript.info/

9. MDN

MDN Web Docs 网站提供开放网络(Open Web)技术有关的信息,包括用于网站和渐进式网络应用的 HTML、CSS 和 API。

Mozilla, Microsoft, Google, Samsung 和 W3C 将合作把 MDN 打造成最好的 Web 文档。

所以在这个平台学习 web 技术算是比较权威的了。

源于开发者,服务开发者。

developer.mozilla.org/zh-CN/

10. clean-code-javascript

优秀的 JS 代码规范。

比如:对相同类型的变量使用相同的关键字

Bad:

getUserInfo(); 
getClientData(); 
getCustomerRecord();

Good:

getUser();

再比如:使用可搜索的命名

在开发过程中,我们阅读代码的时间会远远超过编写代码的时间,因此保证代码的可读性与可搜索会非常重要。切记,没事不要坑自己。

Bad:

//525600到底啥意思?
for (var i = 0; i < 525600; i++) {
  runCronJob();
}

Good:

// 声明为全局变量
var MINUTES_IN_A_YEAR = 525600;
for (var i = 0; i < MINUTES_IN_A_YEAR; i++) {
  runCronJob();
}

github.com/ryanmcdermo…

11. TypeScript 入门教程

从 JavaScript 程序员的角度总结思考,循序渐进的理解 TypeScript。

这个教程真的是猫哥看过的最完整而简洁、并且通俗易懂的 TypeScript 教程!

《TypeScript 入门教程》全面介绍了 TypeScript 强大的类型系统,完整而简洁,示例丰富,比官方文档更易读,非常适合作为初学者学习 TypeScript 的第一本书。 —— 阮一峰

比如 类型别名:类型别名用来给一个类型起个新名字。

简单的例子:

type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
function getName(n: NameOrResolver): Name {
    if (typeof n === 'string') {
        return n;
    } else {
        return n();
    }
}

上例中,我们使用 type 创建类型别名。

类型别名常用于联合类型。

ts.xcatliu.com

12. w3school

前端必须知道的 Web 技术教程平台,虽然很多前端都知道了,但是有必要提一下。

领先的 Web 技术教程 - 全部免费。

在 W3School,你可以找到你所需要的所有的网站建设教程。

从基础的 HTML 到 CSS,乃至进阶的 XML、SQL、JS。

在这里学习前端最好的地方就是有 demo 可能学习,可以验证你的效果或者输出。

www.w3school.com.cn/js/index.as…

最后

不知不觉,已经写到第 12 期了呢,已经分享了接近 100 个好的前端项目了呢,往期精文请看下方宝藏仓库,点击很危险,请慎入!

[前端GitHub]:github.com/FrontEndGit…

平时如何发现好的开源项目,可以看看这两篇文章:如何在 GitHub 上发现优秀开源项目如何使用 GitHub 进行精准搜索的神仙技巧

超级猫的 wx:CB834301747 ,微信搜 “前端GitHub”,回复 “电子书” 即可以获得 160 本前端精华书籍哦。

往期精文

觉得有用 ?喜欢就收藏,顺便点个赞吧,你的支持是超级猫最大的鼓励!