Javascript JS字符串的长度为n,但只有n-1个字符。使用str=str.slice(0,-1)
我使用Khan Academy的网页来制作一个javascript项目(您可以看到)。我之所以提出这个问题,是因为我不知道这个问题是由于javascript的微妙之处造成的,还是因为Khan Academy的系统造成的 以下是问题的说明:Javascript JS字符串的长度为n,但只有n-1个字符。使用str=str.slice(0,-1),javascript,string,slice,Javascript,String,Slice,我使用Khan Academy的网页来制作一个javascript项目(您可以看到)。我之所以提出这个问题,是因为我不知道这个问题是由于javascript的微妙之处造成的,还是因为Khan Academy的系统造成的 以下是问题的说明: var keyPressed = function() { if (keyCode === BACKSPACE) { debug(textBuffer.length); debug(textBuffer);
var keyPressed = function() {
if (keyCode === BACKSPACE) {
debug(textBuffer.length);
debug(textBuffer);
textBuffer = textBuffer.slice(0,-1);
}
};
基本上,只要我按下backspace键,就会运行这段代码。当我第一次调用代码时,它工作得很好;最后一个字符将从全局变量textBuffer
中删除。但是,对该代码的任何后续调用都不会对我的textBuffer
字符串产生任何影响,除非在调用之间更改了textBuffer
。通过使用debug
语句,我注意到字符串长度似乎太大了
我希望我已经提供了足够的细节,以便有人发现问题。有人知道发生了什么事吗
编辑:问题的根源在于:尽管按下
键可以正确地注册退格,但还有另一个名为keyTyped
的函数将不可见的'\b'
字符添加到字符串中。这就是为什么字符串看起来只有2个字符,但长度为3。当您按下backspace键时,会同时执行keyTyped
和keyPressed
功能<首先执行code>keyPressed
,删除一个字符,然后执行keyTyped
,并将一个字符添加到字符串中
在JavaScript中,这个退格字符实际上有一个字符串转义字符:'\b'
要解决问题,请在keyTyped
函数中处理退格键,不要让它将toString
值附加到textBuffer
var keyTyped = function() {
if (key.toString() === '\n') {
parse();
textBuffer = "";
}
if (key.toString() === '\b') {
textBuffer = textBuffer.slice(0, -1);
} else {
textBuffer = textBuffer + key.toString();
}
};
.trim()
或检查是否有任何不可见字符。我从未听说过不可见字符,粗略的谷歌搜索也没有发现任何东西。你能详细解释一下吗?哎呀,这里的代码不足以推断出这个问题;但是看看你链接的原始代码,我相信在退格时,首先你的按键激活,删除最后一个字符,然后你的按键激活,添加一个U+0008
字符(顺便说一句,通常是不可见的)。如果键入了backspace,您应该防止这种效果。这个问题显然是代码中其他地方的某种bug,我找不到。我想知道我是否应该简单地删除这篇文章?@Mahkoe而不是删除这篇文章,你可以编辑它以显示你认为包含错误的部分。你是对的,字符串中添加了“\b”字符。我自己也不会发现。这使我找到了解决这个问题的办法