繁体   English   中英

为什么我收到“ TypeError:无法读取未定义的属性” length”

[英]Why am I getting 'TypeError: Cannot read property 'length' of undefined'

我正在尝试使用香草JS创建键入效果,但是由于某些原因,我不断收到TypeError: Cannot read property 'length' of undefined错误的TypeError: Cannot read property 'length' of undefined 我不明白为什么会这样,因为定义了“单词”。 这已经困扰了我一段时间了,我是那种喜欢独自尝试正确答案的人,但是我完全被困住了。

 var sentence = document.getElementsByClassName('sentence')[0]; var words = ['websites', 'apps', 'games']; var speed = 100; var i = 0; var j = 0; function type(word) { if(i<word.length) { sentence.innerHTML += word.charAt(i); i++; setTimeout(function() { type(word); }, speed); } } function backspace(word) { if(j<word.length) { sentence.innerHTML = sentence.innerHTML.slice(0, -1); j++; setTimeout(function() { backspace(word); }, speed); } } function check() { if(j < words.length) { setTimeout(function() { type(words[j]); }, 1000); j++; check(); } } check(); 
 * { font-family: Arial; } .container { display: flex; align-items: center; justify-content: center; } .cursor { background: #000; width: 2px; height: 15px; animation: blink 1s steps(5, start) infinite; } @keyframes blink { to { visibility: hidden; } } 
 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="styles.css"> <title>Typing Effect Example</title> </head> <body> <div class="container"> <div class="sentence">We make </div> <div class="cursor"></div> </div> <script src="scripts.js"></script> </body> </html> 

正如您所期望的那样,直到给定的持续时间到期后,才会评估传递给setTimeout的函数。 那时,您的j将为3 ,并且words[3]未定义。 因此, (undefined).length给您一个错误。

打开浏览器开发工具,并通过堆栈溢出运行代码段,然后在发生错误的位置设置断点。 当您遇到困难时,这应该是您的第一反应。

错误的意思不是变量未定义,而是其设置为undefined 获取undefined值的一种常见方法是访问undefined对象的属性/索引。 例如,如果您的索引j变成了words范围之外的东西,那么words[j]将等于undefined ,因此word.length将具有类型错误,因为不存在undefined值的length属性。

您的变量名是“ words”,而您正在解析“ word”,请检查变量名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM