携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情
前言
lodash里的to系列中,将数据转换为目标字符串的方法主要有三个,分别是toString、toLawer、toUpper方法。
toString
toString方法主要是将参数value转换为字符串。其中,null和undefined将返回空字符串,-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。