我的程序用字符串中的'after'替换'before'之前的单词。我认为我可能以错误的方式使用.toUpperCase和.toLowerCase。我可以使用.toUpperCase来检查大写,还是只能用它来分配大写?我发布了我的短节目。它完全评论了我期望它如何工作,然后是预期结果和实际结果。
// Params are string, word to be removed, new word to replace removed word.
function myReplace(str, before, after) {
var afterCap;
var newString;
// Uppercase first letter of after, add rest of word.
// afterCap is then capitalized after.
afterCap = after[0].toUpperCase() + after.slice(1);
// If before is capitalized,
if (before[0].toUpperCase()) {
// Replace with capitalized after.
newString = str.replace(before, afterCap);
}
// If before not-capitalized,
else if (before[0].toLowerCase()) {
// Replace with lowercase after.
newString = str.replace(before, after);
}
console.log(newString);
}
myReplace("Let us go to the store", "store", "mall");
// Should return "Let us go to the mall"
// Is in fact returning "Let us go to the Mall"
为什么小写单词'store'被大写的'Mall'替换?
答案 0 :(得分:2)
toUppercase返回一个字符串,而不是布尔值
您的代码实际上并未检查第一个字母是否为大写,只是将它们翻译为大写并检查是否真实。如果字符串非空,那么结果将是真实的,第一个块将被执行,如果它是空的结果将是一个空字符串,这是假的,没有将被执行
javascript中的Truthy值都是除了 false,0,null,undefined和NaN 的所有值,请参阅MDN文章here以获取更多信息
更改此
// If before is capitalized,
if (before[0].toUpperCase()) {
// Replace with capitalized after.
newString = str.replace(before, afterCap);
}
到这个
// If before is capitalized,
if (before[0].toUpperCase() === before[0]) {
// Replace with capitalized after.
newString = str.replace(before, afterCap);
}
第二个else-if语句可以转换为其他语句,将代码转换为:
// If before is capitalized,
if (before[0].toUpperCase() === before[0]) {
// Replace with capitalized after.
newString = str.replace(before, afterCap);
} else {
// If before not-capitalized,
// Replace with lowercase after.
newString = str.replace(before, after);
}
您可以使用三元条件赋值运算符
进一步减少它 newString = str.replace(before,
before[0].toUppercase() === before[0] ? afterCap : after
);
答案 1 :(得分:1)
这是检查给定字符串(或字符)是否为大写
的方法function isUpperCase(str) {
return str === str.toUpperCase();
}