本文为lodash源码分析的第11篇,后续会持续更新这个专题,欢迎指正。
依赖
import isSymbol from '../isSymbol.js'
源码分析
baseToString函数的主要作用是将参数value转换成字符串。
const INFINITY = 1 / 0
const symbolToString = Symbol.prototype.toString
function baseToString(value) {
// 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 `${value.map(baseToString)}`
}
if (isSymbol(value)) {
return symbolToString ? symbolToString.call(value) : ''
}
const result = `${value}`
return (result === '0' && (1 / value) === -INFINITY) ? '-0' : result
}
前提:
- 定义
INFINITY常量。 - 定义
symbolToString:symbol原始值不能转换为字符串,但是可以通过Symbol.prototype.toString转换。
首先,如果value是string类型,直接返回value。
其次,如果value是数组,递归调用baseToString函数做转换。
接着,如果value是Symbol类型,调用symbolToString方法转换。
最后,使用模板字符串将value转成字符串并赋值给result,如果value是-0,单独处理为-0。