lodash里to系列之将数据转换为目标字符串

477 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情

前言

lodash里的to系列中,将数据转换为目标字符串的方法主要有三个,分别是toString、toLawer、toUpper方法。

toString

toString方法主要是将参数value转换为字符串。其中,nullundefined将返回空字符串,-0将被转换为字符串"-0"

使用如下:

_.toString(null)
// => ''

_.toString(-0)
// => '-0'

_.toString([1, 2, 3])
// => '1,2,3'

_.toString()
// => ''

_.toString({})
// => '[object Object]'

toString方法在实现上主要通过调用原型链上的toString方法。

具体处理逻辑如下:

  • 对于null类型直接返回空字符串''。
  • 借助typeof操作符判断,对于string类型直接返回参数。
  • 借助Array.isArray方法,对于数组类型直接遍历+递归处理。
  • 借助内部封装的isSymbol方法,对于symbol类型直接调用原型上的toString方法。
  • 其余的类型直接用字符串拼接的形式直接转换,其中对于值为-0会直接返回'-0'。

源码如下:

import isSymbol from './isSymbol.js'

const INFINITY = 1 / 0

function toString(value) {
  if (value == null) {
    return ''
  }

  if (typeof value === 'string') {
    return value
  }
  if (Array.isArray(value)) {
    return `${value.map((other) => other == null ? other : toString(other))}`
  }
  if (isSymbol(value)) {
    return value.toString()
  }
  const result = `${value}`
  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result
}

toLower

toLower方法主要是将string类型字符串参数转换为小写的字符串。

使用如下:

_.toLower('--Foo-Bar--');
// => '--foo-bar--'
 
_.toLower('fooBar');
// => 'foobar'
 
_.toLower('__FOO_BAR__');
// => '__foo_bar__'

_.toLower()
// => ''

_.toLower({})
// => 'object object'

toLower方法在实现上主要是通过调用字符串原型链上的toLowerCase方法,先对参数转换为字符串形式,所以一开始先调用内部封装的toString方法进行类型转换。

源码如下:

import toString from './toString.js';

function toLower(value) {
  return toString(value).toLowerCase();
}

toUpper

toUpper方法主要是将参数value转换为大写字符串。

使用如下:

_.toUpper('--foo-bar--');
// => '--FOO-BAR--'
 
_.toUpper('fooBar');
// => 'FOOBAR'
 
_.toUpper('__foo_bar__');
// => '__FOO_BAR__'

_.toUpper()
// => ''

_.toUpper({})
// =>'[OBJECT OBJECT]'

toUpper方法在实现上主要是调用原型链上的toUpperCase方法,同时一开始是调用内部封装的toString方法将数据转换为字符串类型。

源码如下:

import toString from './toString.js';

function toUpper(value) {
  return toString(value).toUpperCase();
}

小结

本篇章我们了解到lodash里to系列将数据转换为目标字符串的方法,toString是核心,而内部对各种数据类型进行处理判断,toLower方法和toUpper方法主要是依托原型链上的方法进行实现,即 String.prototype.toLowerCase和String.prototype.toUpperCase。