过去几年像 Underscore 和 lodash 等库进入许多JavaScript程序员的工具函数中。虽然这些工具库可以使你的代码写起来更容易,但是他们不一定使代码更简单或更容易理解。

各种工具函数库层出不穷,每个工具库的写法也各有不同,这样给阅读和维护你代码的人也带来了一定的困难,以为他必须了解你使用的这个这个工具库的函数做了什么事情。

JavaScript不断发展,新ES2015和ES2016版本(以前分别称为ES6和ES7)包了一堆新功能特性,并很容易使用它们。这些特性使得工具库以前的一些基本功能已经过时。

所以你可能不再需要Underscore。

例子:

这些例子说明,ES5.1,ES2015和ES2016做这些事情很容易,你可能不需要一个实用程序库了。ES5已经得到了所有现代浏览器和node.js的支持,要是想支持传统浏览器(比如IE8),还需要像es-shim这样的帮助脚本。

Arrays(数组)

Iterate(迭代)

  • Underscore
    1. _.each(array, iteratee)
  • ES5.1
    1. array.forEach(iteratee)

Map

  • Underscore
    1. _.map(array, iteratee)
  • ES5.1
    1. array.map(iteratee)

Find(查找)

  • Underscore
    1. _.find(array, predicate)
  • ES2015
    1. array.find(predicate)

Get a property from each element in an array(萃取数组对象中某属性值)

  • Underscore(注:pluck也许是map最常使用的用例模型的简化版本,即萃取数组对象中某属性值,返回一个数组。)
    1. _.pluck(array, propertyName)
  • ES2015
    1. array.map(value => value[propertyName])

Check if array includes an element(检查数组中是否包含某个元素)

  • Underscore
    1. _.contains(array, element)
  • ES2016
    1. array.includes(element)

Convert an array-like object to array(把一个类数组转换成一个数组)

  • Underscore
    1. _.toArray(arguments)
  • ES2015
    1. Array.from(arguments)

Create a copy of an array with all falsy values removed.(返回一个除去所有false值的 array副本)

  • Underscore
    1. _.compact(array)
  • ES2015
    1. array.filter(x => !!x)

Create a copy of an array with duplicates removed(返回 array去重后的副本)

  • Underscore
    1. _.uniq(array)
  • ES2015
    1. [...new Set(array)]

Find the index of a value in an array(查找某个值在 array 中的索引值)

  • Underscore
    1. _.indexOf(array, value)
  • ES5.1
    1. array.indexOf(value)

Create an array with n numbers, starting from x(创建一个 N个数字数组,从x开始)

  • Underscore
    1. _.range(x, x + n)
  • ES2015
    1. Array.from({ length: n }, (v, k) => k + x)

Objects(对象)

Names of own enumerable properties(枚举自身的属性名)

  • Underscore
    1. _.keys(object)
  • ES5.1
    1. Object.keys(object)

Names of all enumerable properties(枚举所有的属性名,包括继承过来的)

  • Underscore
    1. _.allKeys(object)
  • ES2015
    1. Reflect.enumerate(object) // 返回一个迭代器

Values(值)

  • Underscore
    1. _.values(object)
  • ES5.1
    1. Object.keys(object).map(key => object[key])

Create a new object with the given prototype(创建具有给定原型的新对象)

  • Underscore
    1. _.create(proto, propertiesObject)
  • ES5.1
    1. Object.create(proto, propertiesObject)

Create a new object from merged properties(创建一个合并属性后的新对象)

  • Underscore
    1. _.extend({}, source, { a: false })
  • ES2016
    1. { ...source, a: false }

Create a shallow clone of an object(创建一个浅拷贝对象)

  • Underscore
    1. _.clone(object)
  • ES2016
    1. { ...object }

Check if an object is an array(检查一个对象是否是一个数组)

  • Underscore
    1. _.isArray(object)
  • ES5.1
    1. Array.isArray(object)

Check if an object is a finite Number(检查一个对象是否是一个有限的数字)

  • Underscore
    1. _.isFinite(object)
  • ES2015
    1. Number.isFinite(object)

Functions(函数)

Bind a function to an object(给对象绑定一个函数)

  • Underscore
    1. foo(function () {
    2. this.bar();
    3. }.bind(this));
    4. foo(_.bind(object.fun, object));
  • ES2015
    1. foo(() => {
    2. this.bar();
    3. });
    4. foo(object.fun.bind(object));
  • ES2016
    1. foo(() => {
    2. this.bar();
    3. });
    4. foo(::object.fun);

Utility(使用功能)

Identity function(迭代行数)

  • Underscore
    1. _.identity
  • ES2015
    1. value => value

A function that returns a value(返回值的函数)

  • Underscore
    1. const fun = _.constant(value);
  • ES2015
    1. const fun = () => value;

The empty function(空函数)

  • Underscore
    1. _.noop()
  • ES2015
    1. () => {}

任何疑问? Send us a pull request on GitHub!

PS:主要内容译自:https://www.reindex.io/blog/you-might-not-need-underscore

你可能不再需要Underscore的更多相关文章

  1. ES2015 (ES6)

    是时候使用ES 2015了 你可能不再需要Underscore BABEL Grunt 先 babel 再用 babel 后的文件 uglify 去掉严格模式.严格模式下全局的this转成了undef ...

  2. underscore源码解析 (转载)

    转载出自http://www.cnblogs.com/human/p/3273616.html (function() { // 创建一个全局对象, 在浏览器中表示为window对象, 在Node.j ...

  3. underscore源码解析

    (function() { // 创建一个全局对象, 在浏览器中表示为window对象, 在Node.js中表示global对象 var root = this; // 保存"_" ...

  4. Underscore.js 源码学习笔记(下)

    上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...

  5. 跟着underscore学防抖

    前言 在前端开发中会遇到一些频繁的事件触发,比如: window 的 resize.scroll mousedown.mousemove keyup.keydown -- 为此,我们举个示例代码来了解 ...

  6. Underscore.js部分讲解

    underscore是非常好用的封装库,大小只有4KB,大多插件都是以underscore为基础: underscore分5大部分:集合:数组:函数:对象:工具 集合:集合就是伪数组,虽然长的和数组一 ...

  7. underscore.js源码解析(二)

    前几天我对underscore.js的整体结构做了分析,今天我将针对underscore封装的方法进行具体的分析,代码的一些解释都写在了注释里,那么废话不多说进入今天的正文. 没看过上一篇的可以猛戳这 ...

  8. 利用Underscore求数组的交集、并集和差集

    1 数组交集函数——intersection 数组的交集是指包含多个数组中的共同元素的一个数组,求数组的交集就是找出给定数组中的共有元素. 下面实现一个求两个数组交集的函数. 判断数组是够包含指定值, ...

  9. 理解Underscore中的节流函数

    上一篇中讲解了Underscore中的去抖函数(_.debounced),这一篇就来介绍节流函数(_.throttled). 经过上一篇文章,我相信很多人都已经了解了去抖和节流的概念.去抖,在一段连续 ...

随机推荐

  1. poj 3984:迷宫问题(广搜,入门题)

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7635   Accepted: 4474 Description ...

  2. 在SSIS包中的事务处理

    在处理SSIS包的数据ETL操作过程中,我们经常遇到的一个问题就是一系列步骤在运行的过程中,如果中间的一个步骤失败了,那么我们就需要清理前面已经运行过的步骤所产生的数据或者结果,这往往是一个很头疼的过 ...

  3. UVA11542 Square(高斯消元 异或方程组)

    建立方程组消元,结果为2 ^(自由变元的个数) - 1 采用高斯消元求矩阵的秩 方法一: #include<cstdio> #include<iostream> #includ ...

  4. Linux环境下stl库使用(map)

    例子1: testMap.cpp #include <string.h> #include <iostream> #include <map> #include & ...

  5. 数据结构之图 Part3 – 1 遍历

    DFS using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...

  6. WCF学习笔记之WCF初识

    这篇博客将介绍WCF的最基础内容,让我们对WCF有一个基本的认识.后续的博客中将会介绍WCF其他方面内容.本篇博客将通过一个简单的例子,介绍如何创建WCF服务,并承载这个服务,让客户端来访问它.下面请 ...

  7. jquery 仿百度搜索下拉框的插件

    转载地址:http://www.open-open.com/lib/view/open1420624048437.html 今天写了个下拉插件分享出来 效果: , 可以搜素,也可以使用上下键选择匹配出 ...

  8. Sizeof运算符小结

    以下内容援引自<C Primer Plus>中文版第五版Page95 Sizeof运算符以字节为单位返回其操作数的大小.(在C中,1个字节被定义为char类型所占用空间的大小.在过去,1个 ...

  9. 内容分发网络CDN(互联网技术)

    内容分发网络(互联网技术)CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更 ...

  10. C语言判断文件是否存在(转)

    int   access(const   char   *filename,   int   amode); amode参数为0时表示检查文件的存在性,如果文件存在,返回0,不存在,返回-1. 这个函 ...