未捕获的类型错误:无法读取未定义的属性(读取"到大写")



我一直在尝试将文本输入转换为正确的大小写和句子大小写。适当的案例似乎很有效,但判决案例会抛出CCD_ 1。浏览了这篇帖子,并应用了一些更改,但没有发现任何运气。令人惊讶的是,.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>

有人能告诉我这里有什么问题吗?

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

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

这一行导致错误。

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;
})

最新更新