zoukankan      html  css  js  c++  java
  • 你可能不再需要Underscore

    过去几年像 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.  
      5. foo(_.bind(object.fun, object));
    • ES2015
      1. foo(() => {
      2. this.bar();
      3. });
      4.  
      5. foo(object.fun.bind(object));
    • ES2016
      1. foo(() => {
      2. this.bar();
      3. });
      4.  
      5. 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

  • 相关阅读:
    InvokeRequired和Invoke
    DataGrid 得到DataGridRow 和DataGridColumn
    DataGrid 如何得到DataGridRow 和DataGridCell 对象
    安装Extended WPF Toolkit
    WPF DataGrid绑定一个组合列
    允许Root登录Docker ubuntu(MAC主机,使用portainer管理)
    photoshop人物美白教程:暗沉肤色提亮美白
    django中聚合aggregate和annotate GROUP BY的使用方法
    Django Model 基础数据库操作应用
    如何在mac上安装gitlab
  • 原文地址:https://www.cnblogs.com/chris-oil/p/5925182.html
Copyright © 2011-2022 走看看