(三)underscore.js架構Objects類API學習
keys_.keys(object)
Retrieve all the names of the object's properties.
_.keys({one: 1, two: 2, three: 3});=> ["one", "two", "three"]
values_.values(object)
Return all of the values of the object's properties.
_.values({one: 1, two: 2, three: 3});=> [1, 2, 3]
pairs_.pairs(object)
Convert an object into a list of [key, value] pairs.
_.pairs({one: 1, two: 2, three: 3});=> [["one", 1], ["two", 2], ["three", 3]]
invert_.invert(object)
Returns a copy of the object where the keys have become the values and the values the keys. For this to work, all of your object's values should be unique and string serializable.
_.invert({Moe: "Moses", Larry: "Louis", Curly: "Jerome"});=> {Moses: "Moe", Louis: "Larry", Jerome: "Curly"};
functions_.functions(object) Alias: methods
Returns a sorted list of the names of every method in an object — that is to say, the name of every function property of the object.
_.functions(_);=> ["all", "any", "bind", "bindAll", "clone", "compact", "compose" ...
extend_.extend(destination, *sources)
Copy all of the properties in the source objects over to the destination object, and return the destination object. It's in-order, so the last source will override properties of the same name in previous arguments.
_.extend({name: 'moe'}, {age: 50});=> {name: 'moe', age: 50}說明:extend函數是直接修改destination參數的,通過下面代碼很容易證明
var destination = {name: 'moe'};var source = {age: 50}_.extend(destination, source);console.log("extend="+destination.age);//50
pick_.pick(object, *keys)
Return a copy of the object, filtered to only have values for the whitelisted(白名單) keys (or array of valid keys). Alternatively accepts a predicate indicating which keys to pick.
_.pick({name: 'moe', age: 50, userid: 'moe1'}, 'name', 'age');=> {name: 'moe', age: 50}_.pick({name: 'moe', age: 50, userid: 'moe1'}, function(value, key, object) { return _.isNumber(value);});=> {age: 50}
omit_.omit(object, *keys)
Return a copy of the object, filtered to omit the blacklisted(黑名單) keys (or array of keys). Alternatively accepts a predicate indicating which keys to omit.
_.omit({name: 'moe', age: 50, userid: 'moe1'}, 'userid');=> {name: 'moe', age: 50}_.omit({name: 'moe', age: 50, userid: 'moe1'}, function(value, key, object) { return _.isNumber(value);});=> {name: 'moe', userid: 'moe1'}
defaults_.defaults(object, *defaults)
Fill in undefined properties in object with the first value present in the following list ofdefaults objects.
var iceCream = {flavor: "chocolate"};_.defaults(iceCream, {flavor: "vanilla", sprinkles: "lots"});=> {flavor: "chocolate", sprinkles: "lots"}說明:這個函數和extend很類似,如果destination和source中屬性名稱沒有重複,那麼2個函數的功能是完全一致的。
差別在於:當屬性名稱有同名的時候,extend直接用source中的值覆蓋掉destination中的值;而defaults則會根據destination中的屬性值是否為undefined區別對待。
var iceCream = {flavor: "chocolate",sprinkles:undefined};_.defaults(iceCream, {flavor: "vanilla", sprinkles: "lots"});console.log("iceCream=" + iceCream.flavor);//chocolateconsole.log("sprinkles=" + iceCream.sprinkles);//lots
clone_.clone(object)
Create a shallow-copied(淺拷貝) clone of the object. Any nested objects or arrays will be copied by reference, not duplicated.
_.clone({name: 'moe'});=> {name: 'moe'};
tap_.tap(object, interceptor)
Invokes interceptor with the object, and then returns object. The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain.
_.chain([1,2,3,200]) .filter(function(num) { return num % 2 == 0; }) .tap(alert) .map(function(num) { return num * num }) .value();=> // [2, 200] (alerted)=> [4, 40000]
has_.has(object, key)
Does the object contain the given key? Identical to object.hasOwnProperty(key), but uses a safe reference to the hasOwnProperty function, in case it's been overridden accidentally.
_.has({a: 1, b: 2, c: 3}, "b");=> true
property_.property(key)
Returns a function that will itself return the key property of any passed-in object.
var moe = {name: 'moe'};'moe' === _.property('name')(moe);=> true
matches_.matches(attrs)
Returns a predicate function that will tell you if a passed in object contains all of the key/value properties present in attrs.
var ready = _.matches({selected: true, visible: true});var readyToGoList = _.filter(list, ready);
isEqual_.isEqual(object, other)
Performs an optimized deep comparison between the two objects, to determine if they should be considered equal.
var moe = {name: 'moe', luckyNumbers: [13, 27, 34]};var clone = {name: 'moe', luckyNumbers: [13, 27, 34]};moe == clone;=> false_.isEqual(moe, clone);=> true
isEmpty_.isEmpty(object)
Returns true if an enumerable object contains no values (no enumerable own-properties). For strings and array-like objects _.isEmpty checks if the length property is 0.
_.isEmpty([1, 2, 3]);=> false_.isEmpty({});=> true
isElement_.isElement(object)
Returns true if object is a DOM element.
_.isElement(jQuery('body')[0]);=> true
isArray_.isArray(object)
Returns true if object is an Array.
(function(){ return _.isArray(arguments); })();=> false_.isArray([1,2,3]);=> true
isObject_.isObject(value)
Returns true if value is an Object. Note that JavaScript arrays and functions are objects, while (normal) strings and numbers are not.
_.isObject({});=> true_.isObject(1);=> false
isArguments_.isArguments(object)
Returns true if object is an Arguments object.
(function(){ return _.isArguments(arguments); })(1, 2, 3);=> true_.isArguments([1,2,3]);=> false
isFunction_.isFunction(object)
Returns true if object is a Function.
_.isFunction(alert);=> true
isString_.isString(object)
Returns true if object is a String.
_.isString("moe");=> true
isNumber_.isNumber(object)
Returns true if object is a Number (including NaN).
_.isNumber(8.4 * 5);=> true
isFinite_.isFinite(object)
Returns true if object is a finite Number.
_.isFinite(-101);=> true_.isFinite(-Infinity);=> false
isBoolean_.isBoolean(object)
Returns true if object is either true or false.
_.isBoolean(null);=> false
isDate_.isDate(object)
Returns true if object is a Date.
_.isDate(new Date());=> true
isRegExp_.isRegExp(object)
Returns true if object is a RegExp.
_.isRegExp(/moe/);=> true
isNaN_.isNaN(object)
Returns true if object is NaN.
Note: this is not the same as the native isNaN function, which will also return true for many other not-number values, such as undefined.
_.isNaN(NaN);=> trueisNaN(undefined);=> true_.isNaN(undefined);=> false
isNull_.isNull(object)
Returns true if the value of object is null.
_.isNull(null);=> true_.isNull(undefined);=> false
isUndefined_.isUndefined(value)
Returns true if value is undefined.
_.isUndefined(window.missingVariable);=> true