这两个文本块之间有什么区别
What is the difference between these two blocks of texts
第一个功能不起作用。它显示消息“Uncaught TypeError TypeError: Cannot read properties of undefined (reading 'toUpperCase')”
这些是代码:
//this is the one with error
function myReplace(str, before, after){
var index = str.indexOf(before);
if (str[index] === str[index].toUpperCase()) {
after = after.charAt(0).toUpperCase()+ after.slice(1);
}else{
after = after.charAt(0).toLowerCase() + after.slice(1);
}
str = str.replace(before, after);
return str;
}
myReplace("A quick brown fox jump over the lazy dog", "jumped", "leaped");
//This apparently works fine.
function myReplace(str, before, after){
var index = str.indexOf(before);
if (str[index] === str[index].toUpperCase()) {
after = after.charAt(0).toUpperCase()+ after.slice(1);
}else{
after = after.charAt(0).toLowerCase() + after.slice(1);
}
str = str.replace(before, after);
return str;
}
myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
代码在语义上不正确。在第一个示例中,您从不使用“jumped”一词,而是使用“jump”。因此不能使用 indexOf 函数的结果。请参阅以下代码片段以进一步了解问题所在。
如果 indexOf 函数找不到子串,它将 return a -1.
由于您无法访问数组中的 -1,因此会 return 出现错误。您应该始终在代码中处理这些边缘情况,以避免不必要的行为。我在尝试访问某些内容之前添加了索引检查。
//this is the one with error
function myReplace(str, before, after){
var index = str.indexOf(before);
console.log(index);
if(index < 0){
return "error index not found"
}
if (str[index] === str[index].toUpperCase()) {
after = after.charAt(0).toUpperCase()+ after.slice(1);
}else{
after = after.charAt(0).toLowerCase() + after.slice(1);
}
str = str.replace(before, after);
return str;
}
myReplace("A quick brown fox jump over the lazy dog", "jumped", "leaped");
在第一种情况下,索引是 -1,因为字符串“jumped”不是 str 的一部分 --> 所以 str[index] 基本上是“undefined”,你不能用 undefined 调用 toUpperCase() .
在秒的情况下,索引是 18 并且 str[index] 是“j”所以你可以调用 toUpperCase() 因为它是一个 char
您的输入有误!
两者的功能是一样的。但是在您的第一个实现中,您的短语中有“jump”,并且您正在搜索“jumped”,这将以错误告终。
此实现:
myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
永远有效
第一个功能不起作用。它显示消息“Uncaught TypeError TypeError: Cannot read properties of undefined (reading 'toUpperCase')”
这些是代码:
//this is the one with error
function myReplace(str, before, after){
var index = str.indexOf(before);
if (str[index] === str[index].toUpperCase()) {
after = after.charAt(0).toUpperCase()+ after.slice(1);
}else{
after = after.charAt(0).toLowerCase() + after.slice(1);
}
str = str.replace(before, after);
return str;
}
myReplace("A quick brown fox jump over the lazy dog", "jumped", "leaped");
//This apparently works fine.
function myReplace(str, before, after){
var index = str.indexOf(before);
if (str[index] === str[index].toUpperCase()) {
after = after.charAt(0).toUpperCase()+ after.slice(1);
}else{
after = after.charAt(0).toLowerCase() + after.slice(1);
}
str = str.replace(before, after);
return str;
}
myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
代码在语义上不正确。在第一个示例中,您从不使用“jumped”一词,而是使用“jump”。因此不能使用 indexOf 函数的结果。请参阅以下代码片段以进一步了解问题所在。 如果 indexOf 函数找不到子串,它将 return a -1.
由于您无法访问数组中的 -1,因此会 return 出现错误。您应该始终在代码中处理这些边缘情况,以避免不必要的行为。我在尝试访问某些内容之前添加了索引检查。
//this is the one with error
function myReplace(str, before, after){
var index = str.indexOf(before);
console.log(index);
if(index < 0){
return "error index not found"
}
if (str[index] === str[index].toUpperCase()) {
after = after.charAt(0).toUpperCase()+ after.slice(1);
}else{
after = after.charAt(0).toLowerCase() + after.slice(1);
}
str = str.replace(before, after);
return str;
}
myReplace("A quick brown fox jump over the lazy dog", "jumped", "leaped");
在第一种情况下,索引是 -1,因为字符串“jumped”不是 str 的一部分 --> 所以 str[index] 基本上是“undefined”,你不能用 undefined 调用 toUpperCase() .
在秒的情况下,索引是 18 并且 str[index] 是“j”所以你可以调用 toUpperCase() 因为它是一个 char
您的输入有误! 两者的功能是一样的。但是在您的第一个实现中,您的短语中有“jump”,并且您正在搜索“jumped”,这将以错误告终。
此实现:
myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
永远有效