Utility

noConflict

_.noConflict()

将_变量的控制权交还给其以前的所有者。返回对Underscore对象的引用。

var underscore = _.noConflict(

identity

_.identity(value)

返回用作参数的相同值。在数学中:f(x)= x

这个函数看起来没用,但在整个Underscore中被用作默认迭代器。

var stooge = {name: 'moe'}; stooge === _.identity(stooge => true

constant

_.constant(value)

创建一个返回与_.constant的参数相同的值的函数。

var stooge = {name: 'moe'}; stooge === _.constant(stooge)( => true

noop

_.noop()

无论传递给它的参数如何,都返回undefined。作为可选回调参数的默认值很有用。

obj.initialize = _.noop;

times

_.times(n, iteratee, [context])

将给定的迭代函数调用n次。使用索引参数调用iteratee的每个调用。生成返回值的数组。

注意:这个例子使用了 面向对象的语法

_(3).times(function(n){ genie.grantWishNumber(n }

random_.random(min, max)

返回最小值最大值之间的随机整数,包括。如果您只传递一个参数,它将返回一个介于0和该数字之间的数字。

_.random(0, 100 => 42

mixin

_.mixin(object)

允许您用自己的实用功能扩展Underscore。传递{name:function}定义的哈希以将您的函数添加到Underscore对象以及OOP包装器。

_.mixin{ capitalize: function(string) { return string.charAt(0).toUpperCase() + string.substring(1).toLowerCase( } } _("fabio").capitalize( => "Fabio"

iteratee

_.iteratee(value, [context])

生成可应用于集合中每个元素的回调。_.iteratee支持多种常用回调用例的简写语法。根据值的类型,_.iteratee将返回:

// No value _.iteratee( => _.identity() // Function _.iteratee(function(n) { return n * 2; } => function(n) { return n * 2; } // Object _.iteratee{firstName: 'Chelsea'} => _.matcher{firstName: 'Chelsea'} // Anything else _.iteratee('firstName' => _.property('firstName'

下面的Underscore方法通过_.iteratee转换谓词:countBy,every,filter,find,findIndex,findKey,findLastIndex,groupBy,indexBy,map,mapObject,max,min,partition,reject,some,sortBy,sortedIndex和uniq

uniqueId

_.uniqueId([prefix])

为客户端模型或需要DOM元素的DOM元素生成一个全局唯一的ID。如果传递了前缀,则该标识将被追加到它。

_.uniqueId('contact_' => 'contact_104'

escape

_.escape(string)

转义字符串以插入到HTML中,替换&,<,>,“,`和'字符。

_.escape('Curly, Larry & Moe' => "Curly, Larry &amp; Moe"

unescape

_.unescape(string)

逃避的对立面,用他们未经转义的同行取代&,<,>,“,和”。

_.unescape('Curly, Larry &amp; Moe' => "Curly, Larry & Moe"

result

_.result(object, property, [defaultValue])

如果named 属性的值是一个函数,那么用该对象作为上下文来调用它; 否则,返回它。如果提供了默认值并且该属性不存在或未定义,则将返回默认值。如果defaultValue是一个函数,它的结果将被返回。

var object = {cheese: 'crumpets', stuff: function(){ return 'nonsense'; }}; _.result(object, 'cheese' => "crumpets" _.result(object, 'stuff' => "nonsense" _.result(object, 'meat', 'ham' => "ham"

now

_.now()

使用运行时中可用的最快方法返回当前时间的整数时间戳。用于实现定时/动画功能。

_.now( => 1392066795351

template

_.template(templateString, [settings])

将JavaScript模板编译为可进行渲染评估的函数。用于从JSON数据源渲染复杂的HTML数据。模板函数既可以使用<%= ...%>来插值,也可以执行任意JavaScript代码,使用<%...%>。如果你想插入一个值,并让它被HTML转义,使用<% - ...%>。在评估模板函数时,传入具有与模板的自由变量相对应的属性的数据对象。该设置参数应该是包含要覆盖的任何_.templateSettings哈希值。

var compiled = _.template("hello: <%= name %>" compiled{name: 'moe'} => "hello: moe" var template = _.template("<b><%- value %></b>" template{value: '<script>'} => "<b>&lt;script&gt;</b>"

您也可以使用JavaScript代码中的打印。这有时比使用<%= ...%>更方便。

var compiled = _.template("<% print('Hello ' + epithet %>" compiled{epithet: "stooge"} => "Hello stooge"

如果ERB风格的分隔符不是您的一杯茶,您可以更改Underscore的模板设置以使用不同的符号来设置内插代码。定义一个插值正则表达式来匹配应该被内插的表达式,一个转义正则表达式,用于匹配应该在HTML转义后插入的表达式,以及一个评估正则表达式,以匹配应该在没有插入到结果字符串中的情况下评估的表达式。您可以定义或省略三者的任意组合。例如,要执行Mustache.js风格的模板:

_.templateSettings = { interpolate: /\{\{(.+?)\}\}/g }; var template = _.template("Hello {{ name }}!" template{name: "Mustache"} => "Hello Mustache!"

默认情况下,模板通过with语句将数据中的值放在本地作用域中。但是,您可以使用变量设置指定单个变量名称。这可以显着提高模板能够呈现的速度。

_.template("Using 'with': ", {variable: 'data'}){answer: 'no'} => "Using 'with': no"

预编译模板在调试无法重现的错误时非常有用。这是因为预编译模板可以提供行号和堆栈跟踪,这是在客户端上编译模板时不可行的。编译模板函数中的属性可用于简化预编译。

<script> JST.project = ; </script>