foop
Version:
interfaces that describe their intentions.
62 lines (59 loc) • 4.25 kB
JavaScript
var isStringPrimitive = require('../is/stringPrimitive')
var isSymbol = require('../is/symbol')
var isZeroish = require('../is/zeroish')
var isMinusInfinity = require('../is/negativeInfinity')
/**
* Converts `value` to a string key if it's not a string or symbol.
* Use non-numeric keys to prevent V8 performance issues
*
* @memberOf cast
* @since 5.0.0-beta.6
* @alias toProperty
* @alias toProp
*
* @param {*} value The value to inspect.
* @return {string|symbol} Returns the key.
*
* {@link https://github.com/facebook/react/pull/7232 react-tokey}
* {@link https://tc39.github.io/ecma262/#sec-topropertykey emca-topropertykey}
* {@link https://tc39.github.io/ecma262/#sec-canonicalnumericindexstring emca-canonicalnumericindexstring}
* @see {@link emca-canonicalnumericindexstring}
* @see {@link emca-topropertykey}
* @see {@link react-tokey}
*
* @example
*
* const symba = Symbol.for('symba')
* toKey(symba)
* //=> Symbol.for('symba')
*
* toKey(0)
* //=> '0'
*
* toKey('0')
* //=> '0'
*
* toKey(-Infinity)
* //=> '-0'
*
* toKey(-0)
* //=> '-0'
*
* toKey(null)
* //=> 'null'
*
*
*/
function toKey(value) {
if (isStringPrimitive(value) || isSymbol(value)) {
return value
}
else if (isZeroish(value) && isMinusInfinity(value)) {
return '-0'
}
else {
return '' + value
}
}
module.exports = toKey
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9LZXkuanMiLCJzb3VyY2VzIjpbInRvS2V5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGlzU3RyaW5nUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaXMvc3RyaW5nUHJpbWl0aXZlJylcbmNvbnN0IGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaXMvc3ltYm9sJylcbmNvbnN0IGlzWmVyb2lzaCA9IHJlcXVpcmUoJy4uL2lzL3plcm9pc2gnKVxuY29uc3QgaXNNaW51c0luZmluaXR5ID0gcmVxdWlyZSgnLi4vaXMvbmVnYXRpdmVJbmZpbml0eScpXG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICogVXNlIG5vbi1udW1lcmljIGtleXMgdG8gcHJldmVudCBWOCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqXG4gKiBAbWVtYmVyT2YgY2FzdFxuICogQHNpbmNlIDUuMC4wLWJldGEuNlxuICogQGFsaWFzIHRvUHJvcGVydHlcbiAqIEBhbGlhcyB0b1Byb3BcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybiB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC83MjMyIHJlYWN0LXRva2V5fVxuICoge0BsaW5rIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXkgZW1jYS10b3Byb3BlcnR5a2V5fVxuICoge0BsaW5rIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNhbm9uaWNhbG51bWVyaWNpbmRleHN0cmluZyBlbWNhLWNhbm9uaWNhbG51bWVyaWNpbmRleHN0cmluZ31cbiAqIEBzZWUge0BsaW5rIGVtY2EtY2Fub25pY2FsbnVtZXJpY2luZGV4c3RyaW5nfVxuICogQHNlZSB7QGxpbmsgZW1jYS10b3Byb3BlcnR5a2V5fVxuICogQHNlZSB7QGxpbmsgcmVhY3QtdG9rZXl9XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICBjb25zdCBzeW1iYSA9IFN5bWJvbC5mb3IoJ3N5bWJhJylcbiAqICAgIHRvS2V5KHN5bWJhKVxuICogICAgLy89PiBTeW1ib2wuZm9yKCdzeW1iYScpXG4gKlxuICogICAgdG9LZXkoMClcbiAqICAgIC8vPT4gJzAnXG4gKlxuICogICAgdG9LZXkoJzAnKVxuICogICAgLy89PiAnMCdcbiAqXG4gKiAgICB0b0tleSgtSW5maW5pdHkpXG4gKiAgICAvLz0+ICctMCdcbiAqXG4gKiAgICB0b0tleSgtMClcbiAqICAgIC8vPT4gJy0wJ1xuICpcbiAqICAgIHRvS2V5KG51bGwpXG4gKiAgICAvLz0+ICdudWxsJ1xuICpcbiAqXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmIChpc1N0cmluZ1ByaW1pdGl2ZSh2YWx1ZSkgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbiAgZWxzZSBpZiAoaXNaZXJvaXNoKHZhbHVlKSAmJiBpc01pbnVzSW5maW5pdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuICctMCdcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gJycgKyB2YWx1ZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXlcbiJdLCJuYW1lcyI6WyJjb25zdCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7QUFDMURBLEdBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUN4Q0EsR0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO0FBQzFDQSxHQUFLLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0Q3pELFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRTtFQUNwQixJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUMvQyxPQUFPLEtBQUs7R0FDYjtPQUNJLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUNuRCxPQUFPLElBQUk7R0FDWjtPQUNJO0lBQ0gsT0FBTyxFQUFFLEdBQUcsS0FBSztHQUNsQjtDQUNGOztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSzsifQ==