Skip to content

Latest commit

 

History

History
67 lines (46 loc) · 2.34 KB

startsWith.md

File metadata and controls

67 lines (46 loc) · 2.34 KB

lodash源码分析之startsWith

本文为读 lodash 源码的第三百三十五篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash

gitbook也会同步仓库的更新,gitbook地址:pocket-lodash

源码分析

startsWith 用来检测字符串 string 是否以 target 字符串开始,也可以指定开始检测的位置 position

源码如下:

function startsWith(string, target, position) {
  const { length } = string
  position = position == null ? 0 : position
  if (position < 0) {
    position = 0
  }
  else if (position > length) {
    position = length
  }
  target = `${target}`
  return string.slice(position, position + target.length) == target
}

endsWith 类似,只要将开始位置 positionpostion + target.length 位置的字符串截取出来,再和 target 比较是否相等,即可知道 string 是否在指定的位置以 target 开始。

处理position

const { length } = string
position = position == null ? 0 : position
if (position < 0) {
  position = 0
}
else if (position > length) {
  position = length
}

如果 position 没传,或者传入 null ,则默认 position0 开始。

如果传入的 position 小于 0 ,因为字符串的索引不可能小于 0 ,则将 positon 重置为 0

如果 position 比字符串的长度还要长,超出字符串的长度范围的位置也没有意义,因此重置为 length

比较

target = `${target}`
return string.slice(position, position + target.length) == target

传入的 target 有可能不是字符串,使用模板字符串来转换成字符串。

然后调用字符串的 slice 截取 positionpositon + target.length 的字符,来和 target 比较,如果两者相等,则认为字符串指定的位置是以 target 开始的。

License

署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)

最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:

作者:对角另一面