功能概述
函数的作用很简单 - 就是用来去除字符串两端的空白字符。通过三个步骤(空值判断、尾部空格处理、头部空格处理)来确保在各种场景下都能正确处理字符串。
源码实现
function baseTrim(string) {
return string
? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "")
: string;
}
实现原理解析
原理概述
baseTrim 函数的实现原理其实很巧妙,它采用了一种高效的方式来处理字符串两端的空白字符:
- 首先通过三元运算符判断字符串是否为空
- 然后使用 trimmedEndIndex 函数找到字符串末尾最后一个非空白字符的位置
- 最后使用正则表达式去除开头的空白字符
这种实现方式不仅高效,而且能处理各种边界情况。
代码解析
让我们一步步来看这个函数是如何工作的:
1. 空值判断
return string ? ... : string;
这一步是在判断输入是否为空值(null、undefined 或空字符串)。来看几个例子:
baseTrim(null); // null
baseTrim(undefined); // undefined
baseTrim(""); // ''
2. 尾部空格处理
string.slice(0, trimmedEndIndex(string) + 1);
这步使用 trimmedEndIndex 函数找到最后一个非空白字符的位置,然后用 slice 截取到这个位置。看看实际例子:
baseTrim("hello "); // 'hello'
baseTrim("world\n\t"); // 'world'
baseTrim(" hi "); // ' hi'
3. 头部空格处理
.replace(reTrimStart, '')
这里的 reTrimStart 正则表达式(/^\s+/)用于匹配字符串开头的空白字符:
^表示匹配字符串的开始位置\s表示匹配任意空白字符(包括空格、制表符、换行符等)+表示匹配前面的模式一次或多次
所以 reTrimStart 会匹配字符串开头的一个或多个空白字符,然后通过 replace 方法将这些空白字符替换为空字符串,从而实现去除字符串开头的空白字符的功能。例如:
baseTrim(" hello"); // 'hello'
baseTrim("\n\thello"); // 'hello'
baseTrim(" hi "); // 'hi'
特殊场景处理
这个函数在处理一些特殊情况时也表现得很好:
// 全空白字符串
baseTrim(" "); // ''
baseTrim("\n\t\r"); // ''
// 单个字符
baseTrim(" a "); // 'a'
// 包含多种空白字符
baseTrim("\n hello \t"); // 'hello'
总结
baseTrim 函数通过巧妙的三步走策略(空值判断、尾部空格处理、头部空格处理),高效地实现了字符串两端去空格的功能。