Change Log
1.8.3 — April 2, 2015 — Diff — Docs
- 新增一个_.create 方法, 作为Object.create的一个简化版本。
- 围绕着一个iOS错误,可导致isArrayLike成为 JIT-ed,还修复一个传递0给isArrayLike时的bug。
1.8.2 — Feb. 22, 2015 — Diff — Docs
- 恢复先前在1.8.1改变的老版本 Internet Explorer的边界情况。
- _.contains添加了一个 fromIndex 参数。
1.8.1 — Feb. 19, 2015 — Diff — Docs
- 修复/改变一些老版本Internet Explorer和边界情况的行为。 用老版本Internet Explorer和Underscore 1.8.1 测试一下您的应用,让我们知道发生了什么...
1.8.0 — Feb. 19, 2015 — Diff — Docs
- 新增_.mapObject,它类似于_.map,但只是对于在对象中的值。
- 新增_.allKeys,它返回一个对象上所有枚举属性名称。
- 恢复一个1.7.0的变更,_.extend仅复制“自己”的属性(注:不包括继承过来的属性)。 希望没有伤害到你 — 如果它这次伤害到了你,我向你道歉。
- 添加_.extendOwn — _.extend的一个不太有用的形式,仅复制“自己”的属性,(注:不包括继承过来的属性)。
- 添加_.findIndex和_.findLastIndex功能,很好地补充了_.indexOf 和 _.lastIndexOf。
- 增加了一个_.isMatch 断言(判断)函数,它会告诉你,如果一个对象匹配的key-value属性。和_.isEqual 和 _.matcher非常接近。
- 增加了一个_.isError功能。
- 恢复_.unzip功能,做为zip相反的功能。回滚。
- _.result现在有一个可选的回退值(或函数提供回退值)。
- 添加_.propertyOf 函数发生器作为_.property的镜像版本。
- 弃用_.matches。目前他已经有一个更加和谐的名称 -_.matcher。
- 简化各种多样的代码,以提高跨平台兼容性的变化,修复边界情况的bug。
1.7.0 — August 26, 2014 — Diff — Docs
- For consistency and speed across browsers, Underscore now ignores native array methods for forEach, map, reduce, reduceRight, filter, every, some, indexOf, and lastIndexOf. "Sparse" arrays are officially dead in Underscore.
- Added _.iteratee to customize the iterators used by collection functions. Many Underscore methods will take a string argument for easier _.property-style lookups, an object for _.where-style filtering, or a function as a custom callback.
- Added _.before as a counterpart to _.after.
- Added _.negate to invert the truth value of a passed-in predicate.
- Added _.noop as a handy empty placeholder function.
- _.isEmpty now works with arguments objects.
- _.has now guards against nullish objects.
- _.omit can now take an iteratee function.
- _.partition is now called with index and object.
- _.matches creates a shallow clone of your object and only iterates over own properties.
- Aligning better with the forthcoming ECMA6 Object.assign, _.extend only iterates over the object's own properties.
- Falsey guards are no longer needed in _.extend and _.defaults—if the passed in argument isn't a JavaScript object it's just returned.
- Fixed a few edge cases in _.max and _.min to handle arrays containing NaN (like strings or other objects) and Infinity and -Infinity.
- Override base methods like each and some and they'll be used internally by other Underscore functions too.
- The escape functions handle backticks (`), to deal with an IE ≤ 8 bug.
- For consistency, _.union and _.difference now only work with arrays and not variadic args.
- _.memoize exposes the cache of memoized values as a property on the returned function.
- _.pick accepts iteratee and context arguments for a more advanced callback.
- Underscore templates no longer accept an initial data object. _.template always returns a function now.
- Optimizations and code cleanup aplenty.
1.6.0 — February 10, 2014 — Diff — Docs
- Underscore 现在将自己注册为AMD(Require.js),Bower和Component, 以及作为一个CommonJS的模块和常规(Java)的脚本。 虽然比较丑陋,但也许是必要的。
- 添加了 _.partition, 一个拆分一个集合为两个结果列表,第一个数组其元素都满足predicate迭代函数, 而第二个的所有元素均不能满足predicate迭代函数。
- 添加了 _.property, 创建一个迭代器,轻松从对象中获取特定属性。 与其他 Underscore 集合函数结合使用时很有用。
- 添加了 _.matches, 一个函数,它会给你一个断言 可以用来辨别 给定的对象是否匹配指定键/值属性的列表。
- 添加了 _.constant, 作为_.identity高阶.
- 添加了 _.now, 一个优化的方式来获得一个时间戳 — 在内部用来加快debounce 和 throttle。
- _.partial函数 现在可以用来部分适用的任何参数, 通过传递_,无论你想要一个占位符变量, 稍后填充。
- _.each 函数现在 返回一个列表的引用,方便链式调用。
- The _.keys 函数 现在 当空对象传入的时候返回一个空数组。
- … 更多杂项重构.
1.5.2 — Sept. 7, 2013 — Diff
- 增加了indexBy函数,他是countBy and groupBy功能相辅相成。
- 增加了sample函数,从数组中产生随机元素。
- 一些有关函数的优化,_.keys 方面的实现(包含大幅提升的对象上each 函数)。另外debounce中一个紧密的循环。
1.5.1 — Jul. 8, 2013 — Diff
- 删除unzip,因为她简单的应用了zip参数的一个数组。使用.zip.apply(, list)代替。
1.5.0 — Jul. 6, 2013 — Diff
- 添加一个unzip新函数,作为_.zip功能相反的函数。
- throttle函数现在增加一个options参数,如果你想禁用第一次首先执行的话,传递{leading: false},还有如果你想禁用最后一次执行的话,传递{trailing: false}。
- Underscore现在提供了一个source map 方便压缩文件的调试。
- defaults函数现在只 重写undefined值,不再重写null值。
- 删除不带方法名参数调用_.bindAll的能力。
- 删除计数为0,调用 _.after 的能力。调用的最小数量现在是1(自然数)
1.4.4 — Jan. 30, 2013 — Diff
- 添加_.findWhere,在列表中找到的第一个元素,一组特定的键和值相匹配。
- 添加_.partial,局部应用一个函数填充在任意数值的参数, 不改变其动态this值。
- 通过去掉了一些的边缘案件涉包括构造函数来简化bind。总之:不要_.bind 你的构造器。
- 一个invoke的小优化。
- 修改压缩版本中由于不当压缩引起的isFunctionBUG。
1.4.3 — Dec. 4, 2012 — Diff
- 改进Underscore和 与Adobe的JS引擎的兼容性,可用于script Illustrator,Photoshop和相关产品。
- 添加一个默认的_.identity迭代到countBy和groupBy中。
- uniq函数现在接受array, iterator, context作为参数列表。
- times函数现在放回迭代函数结果的映射数组。
- 简化和修复throttleBUG。
1.4.2 — 2012年10月1日 — 比较文件
- 为了保证向下兼容, 恢复了 1.4.0 候选版时的一些特性 当传 null 到迭代函数时. 现在又变回非可选参数了.
1.4.1 — Oct. 1, 2012 — 比较文件
- 修复 1.4.0 版本里 lastIndexOf 函数的退化.
1.4.0 — Sept. 27, 2012 — 比较文件
- 增加 pairs 函数, 把一个 JavaScript 对象转换成 [key, value] 的组合 ... 同样地, 也有 object 函数, 把 [key, value] 的数组组合转换成对象.
- 增加 countBy 函数, 可以计算数组内符合条件的对象个数.
- 增加 invert 函数, 在对象里实现一个简单的键值对调.
- 增加 where 函数, 以便于筛选出一个数组里包含指定键值的对象数组.
- 增加 omit 函数, 可以过滤掉对象里的对应key的属性.
- 增加 random 函数, 生成指定范围内的随机数.
- 用 _.debounce 创建的函数现在会返回上一次更新后的值, 就像 _.throttle 加工过的函数一样.
- sortBy 函数现在使用了稳定的排序算法.
- 增加可选参数 fromIndex 到 indexOf 和 lastIndexOf 函数里.
- Underscore 的迭代函数里不再支持稀疏数组. 请使用 for 循环来代替 (或者会更好).
- min 和 max 函数现在可以用在 非常大的数组上.
- 模板引擎里插入变量现在可以使用 null 和 undefined 作为空字符串.
Underscore 的迭代函数不再接受 null 作为非可选参数. 否则您将得到一个错误提示.- 一些小幅修复和调整, 可以在此查看与之前版本的 比较. 1.4.0 可能比较不向下兼容, 这取决于您怎么使用Underscore — 请在升级后进行测试。
1.3.3 — 2012年4月10日
- _.template的多处改进, 现在为潜在的更有效的服务器端预编译 提供模板的源(source)作为属性. 您现在也可以在创建模板的时候 设置 variable 选项, 之后可以通过这个变量名取到模板传入的数据, 取代了 with 语句 — 显著的改进了模板的渲染速度.
- 增加了 pick 函数, 它可以过滤不在所提供的白名单之内的其他属性.
- 增加 result 函数, 在与API工作时很方便, 允许函数属性或原始属性(非函数属性).
- 增加 isFinite 函数, 因为有时候仅仅知道某变量是一个 数的时候还不够, 还要知道它是否是有限的数.
- sortBy 函数现在可以传属性名作为对象的排序标准.
- 修复 uniq 函数, 现在可以在稀疏数组上使用了.
- difference 函数现在在对比数组差异的时候只执行浅度的flatten, 取代之前的深度flatten.
- debounce 函数现在多了一个参数 immediate, 会影响到达时间间隔后执行的是最先的函数调用还是最后的函数调用.
1.3.1 — 2012年1月23日
- 增加 _.has 函数, 作为 hasOwnProperty 更安全的版本.
- 增加 _.collect , 作为 _.map 的别名.
- 恢复一个旧的修改, _.extend 将再次可以正确复制 拥有undefined值的属性.
- 修复在 _.template 的嵌入语句里反转义斜杠的bug.
1.3.0 — 2012年1月11日
- 移除Underscore对AMD(RequireJS)的支持. 如果您想继续在 RequireJS里使用Underscore, 可以作为一个普通的script加载, 封装或修改您的Underscore副本, 或者下载一个Underscore别的fork版本.
1.2.4 — Jan. 4, 2012
- 您现在可以写 (您应该会这样用, 因为这样更简单) _.chain(list) 来代替 _(list).chain().
- 修复已反转义的字符在Underscore模板里的错误, 并增加了支持自定义支持, 使用_.templateSettings, 只需要定义一到两个必备的正则表达式.
- 修复以数组作为第一参数传给_.wrap函数的错误.
- 改进与ClojureScript的兼容性, 增加call 函数到String.prototype里.
1.2.3 — 2011年12月7日
- 动态范围在已编译的 _.template 函数中保留, 所以您可以使用 this 属性, 如果您喜欢的话.
- _.indexOf 和 _.lastIndexOf 增加对稀疏数组的支持.
- _.reduce 和 _.reduceRight 现在都可以传一个明确的 undefined 值. (您为什么要这样做并没有任何原因)
1.2.2 — 2011年11月14日
- 继续改进 _.isEqual , 要让它和语义上所说的一样. 现在原生的JavaScript会一个对象与它的封装起来的对象视为相等的, 还有, 数组只会对比他们数字元素 (#351).
- _.escape 不再尝试在非双重转义的转义HTML实体上进行转换. 现在不管怎样只会反转义一次 (#350).
- 在 _.template 里, 如果愿意的话您可以省略嵌入表达式后面的分号: <% }) %> (#369).
- _.after(callback, 0) 现在会立即触发callback函数, 把"after"做得更易于使用在异步交互的API上 (#366).
1.2.1 — 2011年10月24日
- _.isEqual 函数的几个重要bug修复, 现在能更好地用在复杂的数组上, 和拥有 length 属性的非数组对象上了. (#329)
- jrburke 提供了导出Underscore以便AMD模块的加载器可以加载, 还有 tonylukasavage 提供了导出Underscore给Appcelerator Titanium使用. (#335, #338)
- 您现在可以使用 _.groupBy(list, 'property') 作为 以指定的共同属性来分组的快捷方法.
- _.throttle 函数现在调用的时候会立即自行一次, 此后才是再每隔指定时间再执行一次 (#170, #266).
- 大多数 _.is[类型] 函数不再使用ducktype写法(详见Ruby的duck type).
- _.bind 函数现在在构造函数(constructor)也能用了, 兼容ECMAScript 5标准. 不过您可能永远也用不到 _.bind 来绑定一个构造函数.
- _.clone 函数不再封装对象里的非对象属性.
- _.find 和 _.filter 现在作为 _.detect 和 _.select 的首选函数名.
1.2.0 — 2011年10月5日
- _.isEqual 函数现在支持深度相等性对比, 检测循环结构, 感谢Kit Cambridge.
- Underscore模版现在支持嵌入HTML转义字符了, 使用 <%- ... %> 语句.
- Ryan Tenney 提供了 _.shuffle 函数, 它使用 Fisher-Yates算法的修改版, 返回一个乱序后的数组副本.
- _.uniq 现在可以传一个可选的迭代器iterator, 用来确定一个数组以什么样的标准来确定它是否唯一的.
- _.last 现在增加了一个可选参数, 可以设置返回集合里的最后N个元素.
- 增加了一个新函数 _.initial, 与 _.rest 函数相对, 它会返回一个列表除了最后N个元素以外的所有元素.
1.1.7 — 2011年7月13日 增加 _.groupBy, 它可以将一个集合里的元素进行分组. 增加 _.union 和 _.difference, 用来补充 (重命名过的) _.intersection 函数. 多方面的改进以支持稀疏数组. _.toArray 现在如果直接传数组时, 将会返回此数组的副本. _.functions 现在会返回存在于原型链中的函数名.
1.1.6 — 2011年4月18日 增加 _.after 函数, 被它改造过的函数只有在执行指定次数之后才会生效. _.invoke 现在将使用函数的直接引用. _.every 现在必须传如迭代器函数, 为了符合ECMAScript 5标准. _.extend 当值为undefined的时候不再复制键值. _.bind 现在如果试图绑定一个undefined值的时候将报错.
1.1.5 — 2011年3月20日 增加 _.defaults 函数, 用来合并JavaScript对象, 一般用来做生成默认值使用. 增加 _.once 函数, 用来把函数改造成只能运行一次的函数. _.bind 函数现在委托原生的ECMAScript 5版本(如可用). _.keys 现在传非对象的值时, 将会抛出一个错误, 就和ECMAScript 5标准里的一样. 修复了 _.keys 函数在传入稀疏数组时的bug.
1.1.4 — 2011年1月9日 改进所有数组函数当传值 null 时候的行为, 以符合ECMAScript 5标准. _.wrap 函数现在能正确地 给封装的函数设置 this 关键字了. _.indexOf 函数增加了可选参数isSorted, 寻找索引的时候会将数组作为已排序处理, 将使用更快的二进制搜索. 避免使用 .callee, 保证 _.isArray 函数 在ECMAScript 5严格模式下能正常使用.
1.1.3 — 2010年12月1日 在CommonJS里, Underscore可以像这样引入: var _ = require("underscore"). 增加 _.throttle 和 _.debounce 函数. 移除 _.breakLoop 函数, 为了符合ECMAScript 5标准里所说的每一种实现形式都是不能break的 — 这将去掉try/catch块, 现在, 您遇到Underscore迭代器的抛出的异常时, 将会有更完善的堆栈跟踪来检查错误所在之处. 改进 isType 一类函数, 以便更好地兼容Internet Explorer浏览器. _.template 函数现在可以正确的反转义模板中的反斜杠了. 改进 _.reduce 函数以兼容ECMAScript 5标准: 如果您不传初始值, 将使用集合里的第一项作为初始值. _.each 不再返回迭代后的集合, 为了与ECMAScript 5的 forEach 保持一致.
1.1.2 修复 _.contains 指向 _.intersect 函数的错误, 应该是指向 _.include 函数(.cotains应该是.include的别名), 增加 _.unique, 作为 _.uniq 函数的别名.
1.1.1 改进 _.template 函数的运行速度, 和处理多行插入值的性能. Ryan Tenney 提供了许多Underscore函数的优化方案. 增加了带注释版本的源代码.
1.1.0 修改了 _.reduce 函数以符合ECMAScript 5规范, 取代了之前Ruby/Prototype.js版本的 _.reduce. 这是一个不向下兼容的修改. _.template 函数现在可以不传参了, 并保留空格. _.contains 是一个 _.include 函数新的别名.
1.0.4 Andri Möll 提供了 _.memoize函数, 以缓存计算结果, 来优化的耗时较长的函数, 使得运行速度变快.
1.0.3 修复了 _.isEqual 函数在对比包含 NaN 的对象时返回 false 的问题. 技术上改良后理论上是正确的, 但是语义上似乎有矛盾, 所以要注意避免对比含有NaN的对象.
1.0.2 修复 _.isArguments 在新版本Opera浏览器里的bug, Opera里会把arguments对象当作数组.
1.0.1 修复了 _.isEqual 函数的bug: 这个bug出现在当对比特定因素两个对象时, 这两个对象有着相同个数的值为undefined的key, 但不同名.
1.0.0 Underscore在这几个月里算是相对稳定了, 所以现在打算出测试版, 版本号为1.0. 从0.6版本开始进行改进, 包括_.isBoolean的改进, 和_.extend允许传多个source对象.
0.6.0 主要版本, 整合了一系列的功能函数, 包括 Mile Frawley写的在保留援用功能的基础上, 对集合函数进行重构, 内部代码更加简洁. 新的 _.mixin 函数, 允许您自己的功能函数继承Underscore对象. 增加 _.times 函数, 跟Ruby或Prototype.js里的times的功能一样. 对ECMAScript 5的 Array.isArray函数提供原生支持, 还有Object.keys.
0.5.8 修复了Underscore的集合函数, 以便可以用于DOM的 节点列表(NodeList) 和 HTML集合(HTMLCollection) 再一次地感谢 Justin Tulloss.
0.5.7 修改 _.isArguments 函数, 使用了更安全的实现方式, 还有 加快了 _.isNumber 的运行速度, 感谢 Jed Schmidt.
0.5.6 增加了 _.template 对自定义分隔符的支持, 由 Noah Sloan提供.
0.5.5 修复了一个在移动版Safari里关于arguments对象的面向对象封装的bug.
0.5.4 修复了_.template函数里多个单引号在模板里造成的错误. 了解更多请阅读: Rick Strahl的博客文章.
0.5.2 几个函数的重写: isArray, isDate, isFunction, isNumber, isRegExp, 和 isString, 感谢Robert Kieffer提供的建议. 取代了 Object#toString 的对比方式, 现在以属性来进行对比, 虽然说安全性有所降低, 但是速度比以前快了有一个数量级. 因此其他大多数的Underscore函数也有小幅度的速度提升. 增加了 _.tap 函数, 由Evgeniy Dolzhenko 提供, 与Ruby 1.9的tap方法相似, 对链式语法里嵌入其他功能(如登录)很方便.
0.5.1 增加了 _.isArguments 函数. 许多小的安全检查和优化由 Noah Sloan 和 Andri Möll提供.
0.5.0 [API变更] _.bindAll 现在会将context对象作为第一个参数. 如果不传方法名, context对象的所有方法都会绑定到context, 支持链式语法和简易绑定. _.functions 现在只要一个参数, 然后返回所有的方法名(类型为Function的属性). 调用 .functions() 会列出所有的Underscore函数. 增加 _.isRegExp 函数, isEqual 现在也可以检测两个RegExp对象是否相等了. 所有以"is"开头的函数已经缩减到同一个定义里面, 由Karl Guertin 提供的解决方案.
0.4.7 增加 isDate, isNaN, 和 isNull. 优化 isEqual 函数对比两个数组或两个时间对象时的性能. 优化了 _.keys 函数, 现在的运行速度比以前加快了25%–2倍 (取决于您所使用的浏览器)会加速其所依赖的函数, 如 _.each.
0.4.6 增加 range 函数, Python里同名函数range 的移植版, 用于生成灵活的整型数组. 原始版由Kirill Ishanov提供.
0.4.5 增加 rest 函数, 可以对数组和arguments对象使用, 增加了两个函数的别名, first 的别名为 head, 还有 rest 的别名为 tail, 感谢 Luke Sutton的解决方案. 增加测试文件, 以确保所有Underscore的数组函数都可以在用在 arguments 对象上.
0.4.4 增加 isString, 和 isNumber 函数. 修复了 _.isEqual(NaN, NaN) 会返回 true 的问题.
0.4.3 开始使用原生的 StopIteration 浏览器对象(如果浏览器支持). 修复Underscore在CommonJS环境上的安装.
0.4.2 把解除封装的函数unwrapping改名为value, 更清晰.
0.4.1 链式语法封装的Underscore对象支持函数原型方法的调用, 您可以在封装的数组上连续调用任意函数. 增加 breakLoop 方法, 可以随时在Underscore的迭代中 中断 并跳出迭代. 增加 isEmpty 函数, 在数组和对象上都有用.
0.4.0 现在所有的Underscore函数都可以用面向对象的风格来调用了, 比如: _([1, 2, 3]).map(...);. Marc-André Cournoyer 提供了原始的解决方案. 封装对象可以用链式语法连续调用函数. 添加了 functions 方法, 能以正序方式列出所有的Underscore函数.
0.3.3 增加JavaScript 1.8的函数 reduceRight. 别名为 foldr, 另外 reduce 的别名为 foldl.
0.3.2 可以在 Rhino 上运行了. 只要在编译器里输入: load("underscore.js"). 增加功能函数 identity.
0.3.1 所有迭代器在原始集合里现在都作为第三个参数传入, 和JavaScript 1.6的 forEach 一致. 迭代一个对象现在会以 (value, key, collection) 来调用, 更多详情, 请查看 _.each.
0.3.0 增加 Dmitry Baranovskiy的 综合优化, 合并 Kris Kowal的解决方案让Underscore符合 CommonJS 标准,并和 Narwhal 兼容.
0.2.0 添加 compose 和 lastIndexOf, 重命名 inject 为 reduce, 添加 inject, filter, every, some, 和 forEach 的别名.
0.1.1 添加 noConflict, 以便 "Underscore" 对象可以分配给其他变量.
0.1.0 Underscore.js 首次发布.