From f7c7dee8b0db8be1e46a4d18cde47b110156a78c Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Sat, 2 Jan 2016 11:04:25 -0600 Subject: [PATCH] Add `_.isSymbol`. --- lodash.js | 28 ++++++++++++++++++++++++++-- test/test.js | 2 +- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/lodash.js b/lodash.js index 99e098010..da840d9ed 100644 --- a/lodash.js +++ b/lodash.js @@ -1367,8 +1367,10 @@ var mapCtorString = Map ? funcToString.call(Map) : '', setCtorString = Set ? funcToString.call(Set) : ''; - /** Used to convert symbol objects to primitives. */ - var symbolValueOf = Symbol ? Symbol.prototype.valueOf : undefined; + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = Symbol ? symbolProto.valueOf : undefined, + symbolToString = Symbol ? symbolProto.toString : undefined; /** Used to lookup unminified function names. */ var realNames = {}; @@ -10018,6 +10020,27 @@ (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); } + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); + } + /** * Checks if `value` is classified as a typed array. * @@ -14093,6 +14116,7 @@ lodash.isRegExp = isRegExp; lodash.isSafeInteger = isSafeInteger; lodash.isString = isString; + lodash.isSymbol = isSymbol; lodash.isTypedArray = isTypedArray; lodash.isUndefined = isUndefined; lodash.join = join; diff --git a/test/test.js b/test/test.js index a6d912eae..e45bda636 100644 --- a/test/test.js +++ b/test/test.js @@ -22972,7 +22972,7 @@ var acceptFalsey = lodashStable.difference(allMethods, rejectFalsey); QUnit.test('should accept falsey arguments', function(assert) { - assert.expect(286); + assert.expect(287); var emptyArrays = lodashStable.map(falsey, lodashStable.constant([]));