# baseToString
# Description
转换为字符串(toString
的实现),不会转换为 null
,并且如果 value
为 -0
, 会返回 '-0'
,这一点和 js
本身不同。(关于 js 转换 +0 和 -0 (opens new window) , 参考第二条 If m is +0 or −0, return the String "0".)
# Params
value
# Return
String
# Depend
import isSymbol from '../isSymbol.js'
# Code
/** Used as references for various `Number` constants. */
const INFINITY = 1 / 0
/** Used to convert symbols to primitives and strings. */
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
}
# Analyze
value
为string
时,直接返回value
value
为array
, 递归调用当前方法,返回string
value
为symbol
,调用Symbol.prototype.toString.call(value)
,转换为字符串- 调用模板字符串将
value
转换为string
,赋值给result
; - 进行三目运算符判断,如果
result
为'0'
, 如果value
本身为-0
, 则返回'-0'
, 否则返回result
# Remark
- 主要是根据参数类型进行了不同的处理,并且最终转换字符串返回
- toString MDN (opens new window)
- 其他类型的
toString MDN
参考 toString 源码分析 Remark - 模板字面量(模板字符串) MDN (opens new window)
- Number.NEGATIVE_INFINITY MDN (opens new window)
- Number.POSITIVE_INFINITY MDN (opens new window)
# Example
baseToString('3') // '3'
baseToString(Symbol(1)) // 'Symbol(1)'
baseToString([1,2,3]) // '[1,2,3]'
← baseToNumber baseUniq →