子字符串 vs 切片 vs 其他?



根据MDN的说法,substr被认为是遗留代码,最终可能会被弃用。

因此,我想知道substringslice是否更适合将字符串插入特定索引的其他字符串中?

还是有另一种方法实际上旨在达到此目的?

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

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

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

它们之间的区别是:

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

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

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

由于您已经将字符串引用为this.value,并且由于您可以直接计算下部和上限指示符(无需传递负指示符或 NaN 或任何类似的东西),因此如果要插入特定字符,无论使用substring还是slice,都绝对没有区别。使用任何你想要的,它不会对这样的操作产生任何影响。

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

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">

最新更新