[英]Uncaught TypeError: Cannot read property 'toString' of undefined JavaScript
[英]how can i fix this: Uncaught TypeError: Cannot read property 'toString' of undefined in javascript
尝试编写一个函数,该函数需要一个字符串,然后将字符串返回,并以大写形式包含每个单词的第一个字母。 我能够做到。 但是我一直在迭代中获得第一个索引值的不确定值,因为我的列表中有项目。
我写了一个带有字符串参数的函数。 我使用split(“”)方法将参数传递给split,这样我就可以得到一个单词数组。 当我创建我的forloop遍历所有这些对象时,可以使每个字母的首字母大写。 现在在迭代中,我创建了一个变量来存储使用toString()方法转换为字符串的第一个索引元素,以便稍后可以在其上应用toUpperCase()方法
当我在for循环中执行console.log()时,我可以看到所有列出的元素都已转换(当我执行该函数并将一个字符串传递给它时)
但是我不明白为什么会得到:Uncaught TypeError:无法读取未定义的属性'toString'...并且当我在forloop中将其转换为字符串时,此错误指向变量将索引[i]上的元素保留pickString = newStringList [i] .toString()
function capitalizeLertters (letter) {
var newStringList = letter.split(" ");
// console.log(newStringList[0])
var addAll = []
for (var i = 0; i <= newStringList.length; i++) {
console.log(newStringList[i])
var pickString = newStringList[i].toString()
// console.log(pickString)
var finalString = pickString.charAt(0).toUpperCase() + pickString.slice(1)
// console.log(finalString)
}
addAll.push(finalString)
// console.log(addAll)
return addAll
}
console.log(capitalizeLertters("js string exercises"))
这是我的预期结果:“ Js弦乐练习”
这些是不同的console.log结果
“” js Js字符串字符串练习练习“
但是我的函数最终没有执行...它抛出了这个:
“”“ learnJs.js:100未捕获的TypeError:无法在learningJs.js:110处的capitalizeLertters(learnJs.js:100)读取未定义的属性'toString'
所以
您不需要在字符串上使用toString()
for循环在最后一个元素处崩溃,因为您应该在length -1
处停止,或者只是将<=
替换为<
。
您在循环后调用addAll
,因此它仅添加最后一个元素。
您正在返回一个数组,并且我假设您要使用String,因此可以在数组上使用join()
。
function capitalizeLertters (letter) { var newStringList = letter.split(" "); var addAll = []; for (var i = 0; i < newStringList.length; i++) { var pickString = newStringList[i]; var finalString = pickString.charAt(0).toUpperCase() + pickString.slice(1); addAll.push(finalString); } return addAll.join(" "); } console.log(capitalizeLertters("js string exercises"))
请检查修改
解决方案 :
function capitalizeLertters (letter) {
var newStringList = letter.split(" ");
// console.log(newStringList[0])
var addAll = [];
for (var i = 0; i < newStringList.length; i++) {
console.log(newStringList[i]);
var pickString = newStringList[i];
// console.log(pickString)
var finalString = pickString.charAt(0).toUpperCase() + pickString.slice(1);
// console.log(finalString)
addAll.push(finalString);
}
// console.log(addAll)
return addAll.join(" ");
}
capitalizeLertters("js string exercises");
数组以索引号0开头。newStringList的长度为3。如果给出的长度小于(<),则'i'会像0(“ js”),1(“ string”),2(“ exercises ”)。 如果给出的值小于等于(<=),它将像0(“ js”),1(“ string”),2(“ exercises”),3(undefined)一样。
function capitalizeLertters (letter) {
var newStringList = letter.split(" ");
var addAll = ""
for (var i = 0; i < newStringList.length; i++) {
var pickString = newStringList[i].toString()
var finalString = pickString.charAt(0).toUpperCase() + pickString.slice(1)
addAll += finalString
if(i != newStringList.length-1){
addAll +=" "
}
}
return addAll
}
console.log(capitalizeLertters("js string exercises"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.