使用.toUpperCase检查大写

时间:2016-03-25 00:40:41

标签: javascript

我的程序用字符串中的'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'替换?

2 个答案:

答案 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();
}