Simplify toString (#4441)

* Assume Symbol exists in toString tests

* Use native array map instead of custom one in toString

* Assume Symbol.prototype.toString exists in toString
This commit is contained in:
Luiz Américo
2019-08-25 17:25:42 -03:00
committed by John-David Dalton
parent 3ebb38d389
commit abb54cc49a
2 changed files with 6 additions and 22 deletions

View File

@@ -28,24 +28,12 @@ describe('toString', function() {
assert.deepStrictEqual(toString(values), '-0,-0,0,0'); assert.deepStrictEqual(toString(values), '-0,-0,0,0');
}); });
it('should not error on symbols', function() { it('should handle symbols', function() {
if (Symbol) { assert.strictEqual(toString(symbol), 'Symbol(a)');
try {
assert.strictEqual(toString(symbol), 'Symbol(a)');
} catch (e) {
assert.ok(false, e.message);
}
}
}); });
it('should not error on an array of symbols', function() { it('should handle an array of symbols', function() {
if (Symbol) { assert.strictEqual(toString([symbol]), 'Symbol(a)');
try {
assert.strictEqual(toString([symbol]), 'Symbol(a)');
} catch (e) {
assert.ok(false, e.message);
}
}
}); });
it('should return the `toString` result of the wrapped value', function() { it('should return the `toString` result of the wrapped value', function() {

View File

@@ -1,12 +1,8 @@
import map from './map.js'
import isSymbol from './isSymbol.js' import isSymbol from './isSymbol.js'
/** Used as references for various `Number` constants. */ /** Used as references for various `Number` constants. */
const INFINITY = 1 / 0 const INFINITY = 1 / 0
/** Used to convert symbols to primitives and strings. */
const symbolToString = Symbol.prototype.toString
/** /**
* Converts `value` to a string. An empty string is returned for `null` * Converts `value` to a string. An empty string is returned for `null`
* and `undefined` values. The sign of `-0` is preserved. * and `undefined` values. The sign of `-0` is preserved.
@@ -36,10 +32,10 @@ function toString(value) {
} }
if (Array.isArray(value)) { if (Array.isArray(value)) {
// Recursively convert values (susceptible to call stack limits). // Recursively convert values (susceptible to call stack limits).
return `${map(value, (other) => other == null ? other : toString(other))}` return `${value.map((other) => other == null ? other : toString(other))}`
} }
if (isSymbol(value)) { if (isSymbol(value)) {
return symbolToString ? symbolToString.call(value) : '' return value.toString()
} }
const result = `${value}` const result = `${value}`
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result