子串、切片、其他?

2024-03-07

根据MDN, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr substr被认为是最终可能被弃用的遗留代码。

因此我想知道是否substring or slice更适合将字符串插入到特定索引处的其他字符串中?

或者是否有另一种方法实际上是为了这个目的?

我正在做的是通过检测用户输入keydown,然后在某些情况下,我会拦截并推断以手动传递该值。

input.onkeydown = function(e){
  if (e.key === 'x'){
    return false
  }
  this.value = // insert character at this.selectionEnd into this.value
  return false
}

我这样做的原因是这样我可以管理和限制用户输入,同时保证输出以特定方式格式化。换句话说,用户不必格式化他/她的输入。


它们之间的区别is https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring#Differences_between_substring()_and_slice():

如果indexStart大于indexEnd,substring()方法会交换它的两个参数,这意味着仍然返回一个字符串。如果是这种情况,slice() 方法将返回一个空字符串。

如果其中一个或两个参数为负数或 NaN,则 substring() 方法将它们视为 0。

slice() 还将 NaN 参数视为 0,但当给定负值时,它会从字符串末尾向后计数以查找索引。

因为您已经有对该字符串的引用this.value,并且由于您可以直接计算下索引和上索引(无需传递负索引或 NaN,或类似的任何愚蠢的东西),因此无论您是否使用都绝对没有区别substring or slice如果你想插入一个特定的字符。你想用哪个就用哪个,对于这样的操作不会有任何影响。

this.value = this.value.slice(0, selectionEnd) + 'z' + this.value.slice(selectionEnd);

or

this.value = this.value.substring(0, selectionEnd) + 'z' + this.value.substring(selectionEnd);

两者都工作正常。

input.onkeydown = function(e){
  const { selectionEnd } = this;
  this.value = this.value.substring(0, selectionEnd) + 'z' + this.value.substring(selectionEnd);
  this.selectionEnd = selectionEnd + 1;
  return false;
}
<input id="input" value="abc">
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

子串、切片、其他? 的相关文章

随机推荐