lodash源码分析之baseToString

68 阅读1分钟

本文为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
}

前提:

  1. 定义INFINITY常量。
  2. 定义symbolToStringsymbol原始值不能转换为字符串,但是可以通过 Symbol.prototype.toString转换。

首先,如果valuestring类型,直接返回value

其次,如果value是数组,递归调用baseToString函数做转换。

接着,如果valueSymbol类型,调用symbolToString方法转换。

最后,使用模板字符串将value转成字符串并赋值给result,如果value-0,单独处理为-0