Javascript 为什么这个.substring(index)不起作用?
下面是来自的自定义字符串方法 我不希望替换字符替换正在进行的字符,因此我将其更改为Javascript 为什么这个.substring(index)不起作用?,javascript,substring,Javascript,Substring,下面是来自的自定义字符串方法 我不希望替换字符替换正在进行的字符,因此我将其更改为 String.prototype.replaceAt = function(index, replacement) { return this.substring(0, index) + replacement + this.substring(index); } 我使用它将“#”替换为“%23”,因为否则浏览器无法理解处的链接,从而导致404错误(我在本地主机服务器上编程)。 我的文件名数组看起来像
String.prototype.replaceAt = function(index, replacement) {
return this.substring(0, index) + replacement + this.substring(index);
}
我使用它将“#”替换为“%23”,因为否则浏览器无法理解处的链接,从而导致404错误(我在本地主机服务器上编程)。
我的文件名
数组看起来像
const fileNames = [
["template.html", "first.php", "second.php", "comments.php", "predefined.php", "strings.php", "concat.php",
"numbers.php", "constants.php", "quotes.php"],
["form.html", "handle_form #1.php", "handle_form #2.php", "handle_form #3.php"],
[""],
[""],
[],
[],
];
然后我在二维数组中循环。最后,我用另一个循环遍历文件名中的每个字符串。如果下面的代码被注释掉,它可以正常工作,但是代码完成的任务没有执行
for (let k = 0; k < fileNames[i][j].length; k++) {
if (fileNames[i][j][k] == '#') {
fileNames[i][j] = fileNames[i][j].replaceAt(k, '%23');
}
}
}
}
for(设k=0;k
问题是,只要我将
index+replacement.length
更改为index
,页面就会停止加载,并显示一个弹出窗口,说明页面没有响应。为什么会这样?我怎么修理它?
该代码导致无限循环,因为有故障的
replaceAt
版本仅在每个#
字符前插入所需的子字符串。这意味着代码在处理字符串时,总是会在后面找到另一个#
字符,因此循环变得无限大并阻塞浏览器
我相信你的意思是用这个来代替:
String.prototype.replaceAt = function(index, replacement) {
return this.substring(0, index) + replacement + this.substring(index + 1);
}
(请注意,
+1
-这是唯一的更改!)该代码导致无限循环,因为您的replaceAt
错误版本只是在每个#
字符之前插入所需的子字符串。这意味着代码在处理字符串时,总是会在后面找到另一个#
字符,因此循环变得无限大并阻塞浏览器
我相信你的意思是用这个来代替:
String.prototype.replaceAt = function(index, replacement) {
return this.substring(0, index) + replacement + this.substring(index + 1);
}
(注意
+1
-这是唯一的改变!)嗯,不太喜欢那样改变字符串原型
如果您的目标是对哈希字符进行编码,为什么不使用:
encodeURIComponent(“#”)
输出:“%23”嗯,不太喜欢这样更改字符串原型 如果您的目标是对哈希字符进行编码,为什么不使用: encodeURIComponent(“#”)
输出:“%23”耦合一般的东西,然后解决方案
String.prototype.replaceAt = function(index, replacement) {
return this.substring(0, index) + replacement + this.substring(index + numberOfCharsToOmit);
}
并适当地添加一个数字 结合一般情况,然后解决问题
String.prototype.replaceAt = function(index, replacement) {
return this.substring(0, index) + replacement + this.substring(index + numberOfCharsToOmit);
}
并适当地添加一个数字 您当前的逻辑只是将
#
向上移动字符串,导致无限循环:
String.prototype.replaceAt=函数(索引,替换){
返回此.substring(0,索引)+替换+此.substring(索引);
}
console.log('foo#bar'.replaceAt(3,'baz'))代码>您当前的逻辑只是将#
向上移动字符串,导致无限循环:
String.prototype.replaceAt=函数(索引,替换){
返回此.substring(0,索引)+替换+此.substring(索引);
}
console.log('foo#bar'.replaceAt(3,'baz'))谢谢你的回答,安德鲁·里奇韦!在我看来,是使用全局函数还是向内置对象类型添加方法是有争议的。这也是本地的,我用它来组织我的PHP文件,我是从一本教我如何用PHP和mysql编程的书中编写的。它永远不会出现在GitHub上、公开查看或使用其他库(我喜欢纯JavaScript)。此外,由于页面未加载,我无法看到错误。我尝试了console.log,直到我在return语句中实际执行它为止,它看起来还不错。谢谢你的回答,Andrew Ridgway!在我看来,是使用全局函数还是向内置对象类型添加方法是有争议的。这也是本地的,我用它来组织我的PHP文件,我是从一本教我如何用PHP和mysql编程的书中编写的。它永远不会出现在GitHub上、公开查看或使用其他库(我喜欢纯JavaScript)。此外,由于页面未加载,我无法看到错误。我尝试了console.log,它看起来很好,直到我在返回语句中实际执行它为止。感谢Robin Zigmond的回答!感谢罗宾·齐格蒙德的回答!谢谢你的回答,当然了!我不是这样做的,因为嵌套for循环中还有其他任务要完成。这需要放在两者之间。如果是字符串操作,你可能可以用正则表达式来实现-正则表达式在正确的情况下是一个非常强大和简洁的工具。我同意正则表达式是非常强大的,显然在这里我的问题的答案中。我做一个JSFIDLE怎么样?你可以在上下文中查看我的代码和目标,看看是否有办法?当然,我很乐意看一看。谢谢你,一定的性能,谢谢你的回答!我不是这样做的,因为嵌套for循环中还有其他任务要完成。这需要放在它们之间。如果是字符串操作,你可以