【问题标题】:Uncaught TypeError: Cannot read properties of undefined (reading 'toUpperCase')未捕获的类型错误:无法读取未定义的属性(读取“toUpperCase”)
【发布时间】:2023-03-13 05:19:02
【问题描述】:

我一直在尝试将文本输入转换为正确的大小写和句子大小写。正确的案例似乎工作正常,但句子案例抛出 Uncaught TypeError: Cannot read properties of undefined (reading 'toUpperCase')。通过this 发布并应用了一些更改,但没有发现运气。令人惊讶的是,.toUpperCase() 在正确的 case 函数中工作得很好。

document.getElementById("proper-case").addEventListener("click", function() {
  let words = document.querySelector("textarea").value.split(" ");
  let string = "";
  for (let i = 0; i < words.length; i++) {
    string += words[i][0].toUpperCase() + words[i].substring(1).toLowerCase();
    if (i != words.length - 1) {
      string += " ";
    }
  }
  document.querySelector("textarea").value = string;
});


document.getElementById("sentence-case").addEventListener("click", function() {
  let sentences = document.querySelector("textarea").value.split(".");
  let string = "";
  console.log(sentences);
  for (let i = 0; i <= sentences.length - 1; i++) {
    if (i == 0) {
      string += sentences[i][0].toUpperCase() + sentences[i].substring(1).toLowerCase() + ".";
    } else {
      string += " " + sentences[i][1].toUpperCase() + sentences[i].substring(2).toLowerCase() + ".";
    }
  }
  console.log(string)
  document.querySelector("textarea").value = string;
})
<textarea></textarea>

<button id="proper-case">Proper Case</button>
<button id="sentence-case">Sentence Case</button>

谁能告诉我这里的问题是什么?

【问题讨论】:

  • 您在文本字段中输入了什么值?究竟是哪一行引发了错误?
  • @Phil 只是用句点分隔的随机句子。结果是 split(".") 在末尾留下了一个需要处理的空字符串。

标签: javascript typeerror uppercase


【解决方案1】:

.split('.') 操作在其最后一个数组项返回一个空字符串,因此,sentences[i][1] 未定义。要解决这个问题,您可以检查 sentence[i] 是否不是空字符串。

此外,您可以在 else 情况下使用 String.trimLeft()。

【讨论】:

    【解决方案2】:

    此行导致错误。

    string += " " + sentences[i][1].toUpperCase() + sentences[i].substring(2).toLowerCase() + ".";

    您的拆分在某个点分隔字符串。如果该点之后没有任何内容,则数组中还有一个空元素。这就是 [0] 抛出错误的原因。因为 lerrer 字符串没有第一个字符。要修复错误,您必须先抓住这种情况。

    例如

    document.getElementById("sentence-case").addEventListener("click", function() {
      let sentences = document.querySelector("textarea").value.split(".");
      let string = "";
      console.log('=>', sentences);
      for (let i = 0; i <= sentences.length - 1; i++) {
        if (i == 0) {
          string += sentences[i][0].toUpperCase() + sentences[i].substring(1).toLowerCase() + ".";
        } else {
          console.log(sentences[i][1]);
          let s1 = ''      
          let s3 = ''      
          if(typeof sentences[i][0] !== "undefined") {        
            s1 = " " + sentences[i][0].toUpperCase();
            s3 = ".";
          } 
          string += s1 + sentences[i].substring(2).toLowerCase() + s3;
        }
      }
      console.log(string)
      document.querySelector("textarea").value = string;
    })
    

    【讨论】:

      猜你喜欢
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2021-12-25
      • 2021-11-24
      • 2021-10-31
      • 2021-11-07
      相关资源
      最近更新 更多