From e31e1306c8699f3b9496f466911052afe0be7bcd Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Sun, 12 Feb 2017 23:31:51 -0800 Subject: [PATCH] Inline `baseToString` into `toString`. --- toString.js | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/toString.js b/toString.js index f94d2683d..9391de287 100644 --- a/toString.js +++ b/toString.js @@ -1,4 +1,12 @@ -import baseToString from './.internal/baseToString.js' +import arrayMap from './.internal/arrayMap.js' +import isSymbol from './isSymbol.js' + +/** Used as references for various `Number` constants. */ +const INFINITY = 1 / 0 + +/** Used to convert symbols to primitives and strings. */ +const symbolProto = Symbol ? Symbol.prototype : undefined +const symbolToString = symbolProto ? symbolProto.toString : undefined /** * Converts `value` to a string. An empty string is returned for `null` @@ -20,7 +28,22 @@ import baseToString from './.internal/baseToString.js' * // => '1,2,3' */ function toString(value) { - return value == null ? '' : baseToString(value) + if (value == null) { + return ''; + } + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value + } + if (Array.isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return `${ arrayMap(value, toString) }` + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : '' + } + const result = `${ value }` + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result } export default toString