【发布时间】:2017-04-19 09:34:10
【问题描述】:
我正在使用可汗学院的网页来制作一个 javascript 项目(您可以看到 here)。我提出这个问题是因为我不知道问题是由于 javascript 的微妙之处,还是由于可汗学院的系统。
这里是问题的描述:
var keyPressed = function() {
if (keyCode === BACKSPACE) {
debug(textBuffer.length);
debug(textBuffer);
textBuffer = textBuffer.slice(0,-1);
}
};
基本上,只要我按下退格键,这段代码就会运行。当我 first 调用代码时,它工作正常;最后一个字符从我的全局变量textBuffer 中删除。但是,对该代码的任何后续调用都不会对我的textBuffer 字符串执行任何操作,除非在两次调用之间更改了textBuffer。通过使用debug 语句,我注意到字符串长度似乎太大了。
我希望我已经提供了足够的详细信息,以便有人能够找出问题所在。有人知道这是怎么回事吗?
编辑:这是问题的根源:虽然keyPressed 正确注册了退格,但还有另一个名为keyTyped 的函数将不可见的'\b' 字符添加到字符串中。这就是字符串看起来只有2个字符但长度为3的方式。
【问题讨论】:
-
.trim()或检查是否有任何看不见的字符。 -
我从未听说过隐形字符,粗略的谷歌搜索也没有发现任何东西。你能详细说明一下吗?
-
OP,这里的代码不足以推断问题;但是查看您链接的原始代码,我相信首先在退格键上您的
keyPressed激活,删除最后一个字符,然后您的keyTyped激活,添加一个U+0008字符(顺便说一句,通常是不可见的) .如果键入退格键,您应该防止这种影响。 -
这个问题显然是我找不到的代码中其他地方的某种错误。我想知道我是否应该简单地删除这篇文章?
-
@Mahkoe 而不是删除帖子,您可以对其进行编辑以显示您认为包含错误的部分。
标签: javascript string slice