當(dāng)前位置:首頁(yè) > IT技術(shù) > Windows編程 > 正文

(三)underscore.js框架Objects類API學(xué)習(xí)
2021-08-06 12:42:30


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}
說(shuō)明:extend函數(shù)是直接改動(dòng)destination參數(shù)的,通過(guò)以下代碼非常easy證明

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"}
說(shuō)明:這個(gè)函數(shù)和extend非常類似,假設(shè)destination和source中屬性名沒(méi)有反復(fù),那么2個(gè)函數(shù)的功能是全然一致的。

區(qū)別在于:當(dāng)屬性名有同名的時(shí)候,extend直接用source中的值覆蓋掉destination中的值;而defaults則會(huì)依據(jù)destination中的屬性值是否為undefined區(qū)別對(duì)待。

var iceCream = {flavor: "chocolate",sprinkles:undefined};
_.defaults(iceCream, {flavor: "vanilla", sprinkles: "lots"});
console.log("iceCream=" + iceCream.flavor);//chocolate
console.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);
=> true
isNaN(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



本文摘自 :https://blog.51cto.com/u

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >