foop
Version:
interfaces that describe their intentions.
63 lines (60 loc) • 5.57 kB
JavaScript
var EMPTY_STRING = require('../native/EMPTY_STRING')
var mapArray = require('../loop/map/mapArray')
var symbolToString = require('../symbols/toString')
var isSymbol = require('../is/symbol')
var isNill = require('../is/nullOrUndefined')
var isArray = require('../is/array')
var isString = require('../is/stringPrimitive')
var castToKey = require('./toKey')
/**
* Converts `value` to a string. An empty string is returned for `null`
* and `undefined` values. The sign of `-0` is preserved.
* @memberOf cast
* @since 5.0.0-beta.6
*
* @param {*} value The value to convert.
* @return {string} Returns the converted string.
*
* @fork 4.0.0
* @category Lang
*
* @see http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tostring
* @see https://github.com/svaarala/duktape/issues/204
* @see https://github.com/substack/json-stable-stringify
* @see https://github.com/nickyout/fast-stable-stringify
* @see https://hacks.mozilla.org/2012/12/performance-with-javascript-string-objects/
*
* @example
*
* toString(null)
* //=> ''
*
* toString(-0)
* //=> '-0'
*
* toString([1, 2, 3])
* //=> '1,2,3'
*
*/
function castToString(value) {
if (isNill(value)) {
return EMPTY_STRING
}
// Exit early for strings to avoid a performance hit in some environments.
else if (isString(value)) {
return value
}
else if (isArray(value)) {
// Recursively convert values (susceptible to call stack limits).
return ("" + (mapArray(value, function (other) { return (isNill(other) ? other : castToString(other)); })))
}
else if (isSymbol(value)) {
return symbolToString.call(value)
}
// e.g. isNumber
else {
return castToKey(value)
}
}
module.exports = castToString
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TdHJpbmcuanMiLCJzb3VyY2VzIjpbInRvU3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEVNUFRZX1NUUklORyA9IHJlcXVpcmUoJy4uL25hdGl2ZS9FTVBUWV9TVFJJTkcnKVxuY29uc3QgbWFwQXJyYXkgPSByZXF1aXJlKCcuLi9sb29wL21hcC9tYXBBcnJheScpXG5jb25zdCBzeW1ib2xUb1N0cmluZyA9IHJlcXVpcmUoJy4uL3N5bWJvbHMvdG9TdHJpbmcnKVxuY29uc3QgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pcy9zeW1ib2wnKVxuY29uc3QgaXNOaWxsID0gcmVxdWlyZSgnLi4vaXMvbnVsbE9yVW5kZWZpbmVkJylcbmNvbnN0IGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pcy9hcnJheScpXG5jb25zdCBpc1N0cmluZyA9IHJlcXVpcmUoJy4uL2lzL3N0cmluZ1ByaW1pdGl2ZScpXG5jb25zdCBjYXN0VG9LZXkgPSByZXF1aXJlKCcuL3RvS2V5JylcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKiBAbWVtYmVyT2YgY2FzdFxuICogQHNpbmNlIDUuMC4wLWJldGEuNlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKlxuICogQGZvcmsgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKlxuICogQHNlZSBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b3N0cmluZ1xuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3ZhYXJhbGEvZHVrdGFwZS9pc3N1ZXMvMjA0XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9qc29uLXN0YWJsZS1zdHJpbmdpZnlcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25pY2t5b3V0L2Zhc3Qtc3RhYmxlLXN0cmluZ2lmeVxuICogQHNlZSBodHRwczovL2hhY2tzLm1vemlsbGEub3JnLzIwMTIvMTIvcGVyZm9ybWFuY2Utd2l0aC1qYXZhc2NyaXB0LXN0cmluZy1vYmplY3RzL1xuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICB0b1N0cmluZyhudWxsKVxuICogICAvLz0+ICcnXG4gKlxuICogICB0b1N0cmluZygtMClcbiAqICAgLy89PiAnLTAnXG4gKlxuICogICB0b1N0cmluZyhbMSwgMiwgM10pXG4gKiAgIC8vPT4gJzEsMiwzJ1xuICpcbiAqL1xuZnVuY3Rpb24gY2FzdFRvU3RyaW5nKHZhbHVlKSB7XG4gIGlmIChpc05pbGwodmFsdWUpKSB7XG4gICAgcmV0dXJuIEVNUFRZX1NUUklOR1xuICB9XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGVsc2UgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYCR7bWFwQXJyYXkodmFsdWUsIG90aGVyID0+XG4gICAgICAoaXNOaWxsKG90aGVyKSA/IG90aGVyIDogY2FzdFRvU3RyaW5nKG90aGVyKSkpfWBcbiAgfVxuICBlbHNlIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSlcbiAgfVxuICAvLyBlLmcuIGlzTnVtYmVyXG4gIGVsc2Uge1xuICAgIHJldHVybiBjYXN0VG9LZXkodmFsdWUpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0VG9TdHJpbmdcbiJdLCJuYW1lcyI6WyJjb25zdCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDO0FBQ3REQSxHQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztBQUNoREEsR0FBSyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUM7QUFDckRBLEdBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUN4Q0EsR0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7QUFDL0NBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUN0Q0EsR0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7QUFDakRBLEdBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQ3BDLFNBQVMsWUFBWSxDQUFDLEtBQUssRUFBRTtFQUMzQixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUNqQixPQUFPLFlBQVk7R0FDcEI7O09BRUksSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7SUFDeEIsT0FBTyxLQUFLO0dBQ2I7T0FDSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTs7SUFFdkIsT0FBTyxDQUFBLEVBQUMsSUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQUEsS0FBSyxDQUFBLENBQUMsQUFDOUIsU0FBQSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUEsQ0FBQyxDQUFBLENBQUU7R0FDbkQ7T0FDSSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUN4QixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0dBQ2xDOztPQUVJO0lBQ0gsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDO0dBQ3hCO0NBQ0Y7O0FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRyxZQUFZOyJ9