我收到错误:
未捕获的类型错误:无法读取第 5 行上未定义的属性"长度"
当我将其输入控制台时。我不确定为什么当它被拆分成一个数组然后传递到 for 循环中时,它说senArr[i]
undefined
。
我一直在试图弄清楚为什么会出现此错误......
-for 循环确实可以访问父范围
-senArr 被拆分为一个数组,我认为获取存储在每个索引中的字符串的长度没有任何问题。
出于想法,我开始认为问题出在代码中的其他地方。
function LongestWord(sen) {
var senArr = sen.split(' ');
var longestWord = senArr[0];
for (let i = 1; i <= senArr.length; i++) {
if (senArr[i].length > longestWord.length) {
longestWord = senArr[i];
}
} return longestWord;
}
啊,将<=
更改为<
,因为数组中的最后一个索引是senArr.length - 1
。
function LongestWord(sen) {
var senArr = sen.split(' ');
var longestWord = senArr[0];
for (let i = 1; i < senArr.length; i++) {
console.log('i is ', i, ' and word is ', senArr[i]);
if (senArr[i].length > longestWord.length) {
longestWord = senArr[i];
}
}
return longestWord;
}
console.log(LongestWord('hi there this is a test'));
有了<=
,你超出了最后一个索引(i
在上面的示例中变成了6(,并且该索引处没有字符串,这就是你看到错误的原因。
问题是当您与 <= 进行比较时,您包括数组长度+1 请注意,数组是从零开始的索引,因此最后一项是 length-1
来了...
var LongestWord = (sen) => {
var senArr = sen.split(' ');
console.log(senArr);
var longestWord = '';
for (let i = 0; i <= senArr.length - 1; i++) {
if (senArr[i].length > longestWord.length) {
longestWord = senArr[i];
}
} return longestWord;
}
console.log(LongestWord('alongword is the longest'));
我刚刚将其转换为现代JavaScript并且它可以工作:-(
function LongestWord(sentence) {
const words = sentence.split(' ');
let longest = '';
for (let word of words) {
if (word.length > longest.length) {
longest = word;
}
} return longest;
}
// notice that 'bar' is actually not the longest word
// but the first of all longest words
longestWord('fo bar baz'); // 'bar'