ES6 系列之迭代器与 for of

2018-07-10
阅读 8 分钟
6.9k
看着很简单,但是再回顾这段代码,实际上我们仅仅是需要数组中元素的值,但是却需要提前获取数组长度,声明索引变量等,尤其当多个循环嵌套的时候,更需要使用多个索引变量,代码的复杂度就会大大增加,比如我们使用双重循环进行去重:

ES6 系列之模拟实现 Symbol 类型

2018-06-12
阅读 10 分钟
10.7k
实际上,Symbol 的很多特性都无法模拟实现……所以先让我们回顾下有哪些特性,然后挑点能实现的……当然在看的过程中,你也可以思考这个特性是否能实现,如果可以实现,该如何实现。

ES6 系列之箭头函数

2018-06-04
阅读 5 分钟
12.9k
回顾 我们先来回顾下箭头函数的基本语法。 ES6 增加了箭头函数: {代码...} 相当于: {代码...} 如果需要给函数传入多个参数: {代码...} 如果函数的代码块需要多条语句: {代码...} 如果需要直接返回一个对象: {代码...} 与变量解构结合: {代码...} 很多时候,你可能想不到要这样用,所以再来举个例子,比如在 React ...

ES6 系列之模板字符串

2018-05-30
阅读 7 分钟
6.6k
基础用法 {代码...} 如果你碰巧要在字符串中使用反撇号,你可以使用反斜杠转义: {代码...} 值得一提的是,在模板字符串中,空格、缩进、换行都会被保留: {代码...} 注意,打印的结果中第一行是一个换行,你可以使用 trim 函数消除换行: {代码...} 嵌入变量 模板字符串支持嵌入变量,只需要将变量名写在 ${} 之中,其...

ES6 系列之 let 和 const

2018-05-21
阅读 5 分钟
6.6k
初学者可能会觉得只有 condition 为 true 的时候,才会创建 value,如果 condition 为 false,结果应该是报错,然而因为变量提升的原因,代码相当于:

underscore 的源码该如何阅读?

2018-04-03
阅读 2 分钟
3.6k
这个系列算是 JavaScript 专题系列的番外篇,总共写了 8 篇,重点介绍了 underscore 中的代码组织、链式调用、内部函数、模板引擎、工具函数等内容,旨在帮助大家阅读源码,以及写出自己的 undercore。

underscore 系列之字符实体与 _.escape

2018-03-29
阅读 7 分钟
4.9k
underscore 提供了 _.escape 函数,用于转义 HTML 字符串,替换 &, <, >, ", ', 和 ` 字符为字符实体。

underscore 系列之实现一个模板引擎(下)

2018-01-25
阅读 10 分钟
4.1k
我们的本意是想打印带 "" 包裹的 Vikings 字符串,但是在 JavaScript 中,字符串使用单引号或者双引号来表示起始或者结束,这段代码会报 Unexpected identifier 错误。

underscore 系列之实现一个模板引擎(上)

2017-12-20
阅读 7 分钟
4.9k
前言 underscore 提供了模板引擎的功能,举个例子: {代码...} 感觉好像没有什么强大的地方,再来举个例子: 在 HTML 文件中: {代码...} JavaScript 文件中: {代码...} 效果为: 那么该如何实现这样一个 _.template 函数呢? 实现思路 underscore 的 template 函数参考了 jQuery 的作者 John Resig 在 2008 年发表的一...

underscore 系列之防冲突与 Utility Functions

2017-12-14
阅读 4 分钟
4.6k
所以 underscore 提供了 noConflict 功能,可以放弃 underscore 的控制变量 _,返回 underscore 对象的引用。

underscore 系列之内部函数 restArgs

2017-12-06
阅读 4 分钟
3.6k
partial 在《 JavaScript 专题之偏函数》中,我们写了一个 partial 函数,用来固定函数的部分参数,实现代码如下: {代码...} rest parameter ES6 为我们提供了剩余参数(rest parameter)语法,允许我们将一个不定数量的参数表示为一个数组。 {代码...} 我们可以利用这一特性简化 partial 实现的代码: {代码...} 写个 ...

underscore 系列之内部函数 cb 和 optimizeCb

2017-11-29
阅读 7 分钟
5.6k
map 方法除了传入要处理的数组之外,还有两个参数 iteratee 和 context,类似于 Array.prototype.map 中的其他两个参数,其中 iteratee 表示处理函数,context 表示指定的执行上下文,即 this 的值。

underscore 系列之链式调用

2017-11-22
阅读 7 分钟
4.7k
前言 本文接着上篇《underscore 系列之如何写自己的 underscore》,阅读本篇前,希望你已经阅读了上一篇。 jQuery 我们都知道 jQuery 可以链式调用,比如: {代码...} 我们写个简单的 demo 模拟链式调用: {代码...} jQuery 之所以能实现链式调用,关键就在于通过 return this,返回调用对象。再精简下 demo 就是: {代...

underscore 系列之如何写自己的 underscore

2017-11-15
阅读 9 分钟
5.4k
在 《JavaScript 专题系列》 中,我们写了很多的功能函数,比如防抖、节流、去重、类型判断、扁平数组、深浅拷贝、查找数组元素、通用遍历、柯里化、函数组合、函数记忆、乱序等,可以我们该如何组织这些函数,形成自己的一个工具函数库呢?这个时候,我们就要借鉴 underscore 是怎么做的了。

JavaScript专题系列20篇正式完结!

2017-10-25
阅读 3 分钟
10.3k
JavaScript 专题系列共计 20 篇,主要研究日常开发中一些功能点的实现,比如防抖、节流、去重、类型判断、拷贝、最值、扁平、柯里、递归、乱序、排序等,特点是研(chao)究(xi) underscore 和 jQuery 的实现方式。

JavaScript专题之解读 v8 排序源码

2017-10-19
阅读 11 分钟
9.1k
排序采用的算法跟数组的长度有关,当数组长度小于等于 10 时,采用插入排序,大于 10 的时候,采用快速排序。(当然了,这种说法并不严谨)。

JavaScript专题之乱序

2017-10-12
阅读 4 分钟
5.3k
JavaScript 专题系列第十九篇,讲解数组乱序,重点探究 Math.random() 为什么不能真正的乱序? 乱序 乱序的意思就是将数组打乱。 嗯,没有了,直接看代码吧。 Math.random 一个经常会遇见的写法是使用 Math.random(): {代码...} Math.random() - 0.5 随机得到一个正数、负数或是 0,如果是正数则降序排列,如果是负数则...

JavaScript专题之递归

2017-09-13
阅读 5 分钟
7.1k
JavaScript 专题系列第十八篇,讲解递归和尾递归 定义 程序调用自身的编程技巧称为递归(recursion)。 阶乘 以阶乘为例: {代码...} 示意图(图片来自 wwww.penjee.com): 斐波那契数列 在《JavaScript专题之函数记忆》中讲到过的斐波那契数列也使用了递归: {代码...} 递归条件 从这两个例子中,我们可以看出: 构成递归...

JavaScript专题之函数记忆

2017-09-06
阅读 4 分钟
7k
实现这样一个 memorize 函数很简单,原理上只用把参数和对应的结果数据存到一个对象中,调用时,判断参数对应的数据是否存在,存在就返回对应的结果数据。

JavaScript专题之函数组合

2017-09-01
阅读 8 分钟
6.4k
还好我们只有两个步骤,首先小写转大写,然后拼接字符串。如果有更多的操作,greet 函数里就需要更多的嵌套,类似于 fn3(fn2(fn1(fn0(x))))。

JavaScript专题之惰性函数

2017-08-22
阅读 2 分钟
7.7k
JavaScript 专题系列第十五篇,讲解惰性函数 需求 我们现在需要写一个 foo 函数,这个函数返回首次调用时的 Date 对象,注意是首次。 解决一:普通方法 {代码...} 问题有两个,一是污染了全局变量,二是每次调用 foo 的时候都需要进行一次判断。 解决二:闭包 我们很容易想到用闭包避免污染全局变量。 {代码...} 然而还...

JavaScript专题之偏函数

2017-08-16
阅读 3 分钟
14k
In computer science, partial application (or partial function application) refers to the process of fixing a number of arguments to a function, producing another function of smaller arity.

JavaScript专题之函数柯里化

2017-08-11
阅读 7 分钟
8.8k
In mathematics and computer science, currying is the technique of translating the evaluation of a function that takes multiple arguments (or a tuple of arguments) into evaluating a sequence of functions, each with a single argument.

JavaScript专题之如何判断两个对象相等

2017-08-09
阅读 10 分钟
17.1k
虽然标题写的是如何判断两个对象相等,但本篇我们不仅仅判断两个对象相等,实际上,我们要做到的是如何判断两个参数相等,而这必然会涉及到多种类型的判断。

JavaScript专题之jQuery通用遍历方法each的实现

2017-08-03
阅读 4 分钟
5.9k
JavaScript 专题系列第十一篇,讲解 jQuery 通用遍历方法 each 的实现 each介绍 jQuery 的 each 方法,作为一个通用遍历方法,可用于遍历对象和数组。 语法为: {代码...} 回调函数拥有两个参数:第一个为对象的成员或数组的索引,第二个为对应变量或内容。 {代码...} {代码...} 退出循环 尽管 ES5 提供了 forEach 方法...

JavaScript专题之学underscore在数组中查找指定元素

2017-07-26
阅读 6 分钟
6.4k
JavaScript专题系列第十篇,讲解如何从数组中查找指定元素,并且跟着 undersocre 实现 findIndex 和 findLastIndex、sortedIndex、indexOf 和 lastIndexOf

JavaScript专题之数组扁平化

2017-07-21
阅读 4 分钟
7.1k
JavaScript 专题系列第九篇,讲解如何实现数组的扁平化,并解析 underscore 的 _.flatten 源码 扁平化 数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。 举个例子,假设有个名为 flatten 的函数可以做到数组扁平化,效果就会如下: {代码...} 知道了效果是什么样的了,我们可...

JavaScript专题之如何求数组的最大值和最小值

2017-07-19
阅读 2 分钟
9.2k
JavaScritpt 专题系列第八篇,讲解多种方式求数组的最大值和最小值 前言 取出数组中的最大值或者最小值是开发中常见的需求,但你能想出几种方法来实现这个需求呢? Math.max JavaScript 提供了 Math.max 函数返回一组数中的最大值,用法是: {代码...} 值得注意的是: 如果有任一参数不能被转换为数值,则结果为 NaN。 m...

JavaScript专题之从零实现jQuery的extend

2017-07-14
阅读 7 分钟
6.5k
jQuery 的 extend 是 jQuery 中应用非常多的一个函数,今天我们一边看 jQuery 的 extend 的特性,一边实现一个 extend!

JavaScript专题之深浅拷贝

2017-07-12
阅读 3 分钟
6.9k
JavaScript 专题系列第六篇,讲解深浅拷贝的技巧和以及实现深浅拷贝的思路 前言 拷贝也是面试经典呐! 数组的浅拷贝 如果是数组,我们可以利用数组的一些方法比如:slice、concat 返回一个新数组的特性来实现拷贝。 比如: {代码...} 用 slice 可以这样做: {代码...} 但是如果数组嵌套了对象或者数组的话,比如: {代码...