根据MDN的说法,substr
被认为是遗留代码,最终可能会被弃用。
因此,我想知道substring
或slice
是否更适合将字符串插入特定索引的其他字符串中?
还是有另一种方法实际上旨在达到此目的?
我正在做的是通过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">