# createCaseFirst
# Description
创建一个类似于 lowerFirst
的方法,针对于传入字符串的首个字符进行处理
# Params
{String} methodName
-- 对首字母进行大小写转换的方法名。
# Return
Function
# Depend
import castSlice from './castSlice.js'
import hasUnicode from './hasUnicode.js'
import stringToArray from './stringToArray.js'
# Code
function createCaseFirst(methodName) {
return (string) => {
if (!string) {
return ''
}
const strSymbols = hasUnicode(string)
? stringToArray(string)
: undefined
const chr = strSymbols
? strSymbols[0]
: string[0]
const trailing = strSymbols
? castSlice(strSymbols, 1).join('')
: string.slice(1)
return chr[methodName]() + trailing
}
}
# Analyze
- 最终会返回一个方法给调用者
- 判断是否传入了
string
,如果没有则返回 空字符串 - 定义
strSymbols
用来接收Unicode
字符的数组,如果不包含Unicode
字符,则为undefined
- 获取传入字符串的第一个字符 chr , 如果存在
Unicode
字符,则使用strSymbols[0]
, 否则取数组第一位(string[0]
) - 定义除首字母剩余的字符串
trailing
, 如果存在Unicode
字符,则调用castSlice
进行截取,并join
为一个新的字符串, 否则调用string.slice
- 调用传入的
methodName
方法对首字母进行处理,并拼接trailing
后返回
# Remark
- 属性访问 MDN (opens new window)
- String.prototype.slice MDN (opens new window)
- 假设传入的
methodName
为toUpperCase
, 那么在第6步时,就相当于'a'['toUpperCase']()
,通过属性访问调用方法是可以成功的(一个方法就是一个可以被调用的属性而已)
# Example
const upperFirst = createCaseFirst('toUpperCase')
upperFirst('fee') // Fee
upperFirst('Fee') // Fee