underscore-source 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
(function() {
|
10
10
|
|
11
|
-
|
11
|
+
// ------------------------- Baseline setup ---------------------------------
|
12
12
|
|
13
13
|
// Establish the root object, "window" in the browser, or "global" on the server.
|
14
14
|
var root = this;
|
@@ -38,9 +38,9 @@
|
|
38
38
|
propertyIsEnumerable = Object.prototype.propertyIsEnumerable;
|
39
39
|
|
40
40
|
// Current version.
|
41
|
-
_.VERSION = '0.5.
|
41
|
+
_.VERSION = '0.5.2';
|
42
42
|
|
43
|
-
|
43
|
+
// ------------------------ Collection Functions: ---------------------------
|
44
44
|
|
45
45
|
// The cornerstone, an each implementation.
|
46
46
|
// Handles objects implementing forEach, arrays, and raw objects.
|
@@ -234,7 +234,7 @@
|
|
234
234
|
return _.toArray(obj).length;
|
235
235
|
};
|
236
236
|
|
237
|
-
|
237
|
+
// -------------------------- Array Functions: ------------------------------
|
238
238
|
|
239
239
|
// Get the first element of an array. Passing "n" will return the first N
|
240
240
|
// values in the array. Aliased as "head". The "guard" check allows it to work
|
@@ -340,7 +340,7 @@
|
|
340
340
|
}
|
341
341
|
};
|
342
342
|
|
343
|
-
|
343
|
+
// ----------------------- Function Functions: ------------------------------
|
344
344
|
|
345
345
|
// Create a function bound to a given object (assigning 'this', and arguments,
|
346
346
|
// optionally). Binding with arguments is also known as 'curry'.
|
@@ -396,7 +396,7 @@
|
|
396
396
|
};
|
397
397
|
};
|
398
398
|
|
399
|
-
|
399
|
+
// ------------------------- Object Functions: ------------------------------
|
400
400
|
|
401
401
|
// Retrieve the names of an object's properties.
|
402
402
|
_.keys = function(obj) {
|
@@ -428,6 +428,13 @@
|
|
428
428
|
return _.extend({}, obj);
|
429
429
|
};
|
430
430
|
|
431
|
+
// Invokes interceptor with the obj, and then returns obj.
|
432
|
+
// The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain.
|
433
|
+
_.tap = function(obj, interceptor) {
|
434
|
+
interceptor(obj);
|
435
|
+
return obj;
|
436
|
+
};
|
437
|
+
|
431
438
|
// Perform a deep comparison to check if two objects are equal.
|
432
439
|
_.isEqual = function(a, b) {
|
433
440
|
// Check object identity.
|
@@ -474,11 +481,41 @@
|
|
474
481
|
return !!(obj && obj.nodeType == 1);
|
475
482
|
};
|
476
483
|
|
484
|
+
// Is a given value an array?
|
485
|
+
_.isArray = function(obj) {
|
486
|
+
return obj && obj.concat && obj.unshift;
|
487
|
+
};
|
488
|
+
|
477
489
|
// Is a given variable an arguments object?
|
478
490
|
_.isArguments = function(obj) {
|
479
491
|
return obj && _.isNumber(obj.length) && !_.isArray(obj) && !propertyIsEnumerable.call(obj, 'length');
|
480
492
|
};
|
481
493
|
|
494
|
+
// Is a given value a function?
|
495
|
+
_.isFunction = function(obj) {
|
496
|
+
return obj && obj.constructor && obj.call && obj.apply;
|
497
|
+
};
|
498
|
+
|
499
|
+
// Is a given value a string?
|
500
|
+
_.isString = function(obj) {
|
501
|
+
return obj === '' || (obj && obj.charCodeAt && obj.substr);
|
502
|
+
};
|
503
|
+
|
504
|
+
// Is a given value a number?
|
505
|
+
_.isNumber = function(obj) {
|
506
|
+
return toString.call(obj) === '[object Number]';
|
507
|
+
};
|
508
|
+
|
509
|
+
// Is a given value a date?
|
510
|
+
_.isDate = function(obj) {
|
511
|
+
return obj && obj.getTimezoneOffset && obj.setUTCFullYear;
|
512
|
+
};
|
513
|
+
|
514
|
+
// Is the given value a regular expression?
|
515
|
+
_.isRegExp = function(obj) {
|
516
|
+
return obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false);
|
517
|
+
};
|
518
|
+
|
482
519
|
// Is the given value NaN -- this one is interesting. NaN != NaN, and
|
483
520
|
// isNaN(undefined) == true, so we make sure it's a number first.
|
484
521
|
_.isNaN = function(obj) {
|
@@ -495,17 +532,7 @@
|
|
495
532
|
return typeof obj == 'undefined';
|
496
533
|
};
|
497
534
|
|
498
|
-
//
|
499
|
-
// functions based on their toString identifiers.
|
500
|
-
var types = ['Array', 'Date', 'Function', 'Number', 'RegExp', 'String'];
|
501
|
-
for (var i=0, l=types.length; i<l; i++) {
|
502
|
-
(function() {
|
503
|
-
var identifier = '[object ' + types[i] + ']';
|
504
|
-
_['is' + types[i]] = function(obj) { return toString.call(obj) == identifier; };
|
505
|
-
})();
|
506
|
-
}
|
507
|
-
|
508
|
-
/* -------------------------- Utility Functions: -------------------------- */
|
535
|
+
// -------------------------- Utility Functions: ----------------------------
|
509
536
|
|
510
537
|
// Run Underscore.js in noConflict mode, returning the '_' variable to its
|
511
538
|
// previous owner. Returns a reference to the Underscore object.
|
@@ -550,7 +577,7 @@
|
|
550
577
|
return data ? fn(data) : fn;
|
551
578
|
};
|
552
579
|
|
553
|
-
|
580
|
+
// ------------------------------- Aliases ----------------------------------
|
554
581
|
|
555
582
|
_.forEach = _.each;
|
556
583
|
_.foldl = _.inject = _.reduce;
|
@@ -562,7 +589,7 @@
|
|
562
589
|
_.tail = _.rest;
|
563
590
|
_.methods = _.functions;
|
564
591
|
|
565
|
-
|
592
|
+
// ------------------------ Setup the OOP Wrapper: --------------------------
|
566
593
|
|
567
594
|
// Helper function to continue chaining intermediate results.
|
568
595
|
var result = function(obj, chain) {
|