Uncaught TypeError: Cannot read properties of undefined (reading 'toUpperCase')
Uncaught TypeError: Cannot read properties of undefined (reading 'toUpperCase')
我一直在尝试将文本输入转换为正确的大小写和句子大小写。正确的案例似乎工作正常但句子案例抛出
Uncaught TypeError: Cannot read properties of undefined (reading 'toUpperCase')
。经历了 post 并应用了一些更改但没有发现运气。令人惊讶的是,.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('.') 操作 returns 其最后一个数组项为空字符串,因此,sentences[i][1]
未定义。为了解决这个问题,您可以检查 sentences[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;
})
我一直在尝试将文本输入转换为正确的大小写和句子大小写。正确的案例似乎工作正常但句子案例抛出
Uncaught TypeError: Cannot read properties of undefined (reading 'toUpperCase')
。经历了 .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('.') 操作 returns 其最后一个数组项为空字符串,因此,sentences[i][1]
未定义。为了解决这个问题,您可以检查 sentences[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;
})