# endsWith

# Description

检查字符串 string 是否以给定的 target 字符串结尾

# Params

(string, target, position)

position - 搜索位置

# Return

Boolean

# Code

function endsWith(string, target, position) {
  const { length } = string
  position = position === undefined ? length : +position
  if (position < 0 || position != position) {
    position = 0
  }
  else if (position > length) {
    position = length
  }
  const end = position
  position -= target.length
  return position >= 0 && string.slice(position, end) == target
}

# Analyze

  1. 首先处理了 position 的值
    • 如果没有传入 positionposition 则取 length
    • 如果 position < 0,或者 positionNaN ,则取0
    • 如果 position > length ,取 length
  2. 进行截取和对比
    • end 设置为 position
    • 开始位置就是 position - target.length
    • 如果 开始位置小于 0 ,则表示不符合条件, 返回 false
    • 在大于等于 0 是,调用 slice 方法进行截取,拿截取的值和 target 做对比,并返回结果

# Remark

  1. String.prototype.slice() MDN (opens new window) 方法提取某个字符串的一部分,并返回一个新的字符串,且不会改动原字符串。

# Example

console.log(endsWith('abcdefg', 'ef')) // false
console.log(endsWith('abcdefg', 'efg')) // true
console.log(endsWith('abcdefg', 'ef', 6)) // true