表白:黑白圣堂血天使,天剑鬼刀阿修罗。';
讲解对象:/Uncaught TypeError: Cannot read properties of undefined (reading toString)
作者:融水公子 rsgz
===
js 出现的这个问题 百思不得其解,感觉很奇怪,因为数字转化为字符串 这么简单的逻辑不可能写错吧。
我甚至写了下面的逻辑进行测试了一下 发现toString()这个写法没问题 是能够正常的转换数字为字符串的ye_num=7 ye = q('div.paging-box.tab-nav.page-up')[0] .querySelector('ul li:nth-last-child(2)') .querySelectorAll('a[title^="第"]')[0]; if (ye && ye.innerText.includes(ye_num.toString()+'/')) { console.log(1111) }
但是神奇的一幕发生了
当我写成这样总是报错,很奇怪function checkAndClick_a_dijiye(ye_num) { ye = q('div.paging-box.tab-nav.page-up')[0] .querySelector('ul li:nth-last-child(2)') .querySelectorAll('a[title^="第"]')[0]; if (ye && ye.innerText.includes(ye_num.toString()+'/')) { delayedCode(); } else { setTimeout(checkAndClick_a_dijiye, 2500); // 这里的时间间隔可以根据需要进行调整 } }
后来才知道,这里面传参的时候没有写全,应该要把ye_num参数传进去,否则就在函数里面出现了ye_num未定义的情况 这种情况下未定义的对象怎么可能使用toString()方法呢?百分百报错啊setTimeout(checkAndClick_a_dijiye, 2500)
修改成这样就没问题了function checkAndClick_a_dijiye(ye_num) { ye = q('div.paging-box.tab-nav.page-up')[0] .querySelector('ul li:nth-last-child(2)') .querySelectorAll('a[title^="第"]')[0]; if (ye && ye.innerText.includes(ye_num.toString()+'/')) { delayedCode(); } else { setTimeout(checkAndClick_a_dijiye(ye_num), 2500); // 这里的时间间隔可以根据需要进行调整 } }
这么做会解决当前的问题 但是会制造一个新的问题,我们不能再setTimeout里面显示的传参,需要写成匿名函数的形式才可以,否则setTimeout 会立即执行function checkAndClick_a_dijiye(ye_num) { ye = q('div.paging-box.tab-nav.page-up')[0] .querySelector('ul li:nth-last-child(2)') .querySelectorAll('a[title^="第"]')[0]; if (ye && ye.innerText.includes(ye_num.toString()+'/')) { delayedCode(); } else { setTimeout(() => checkAndClick_a_dijiye(ye_num), 2500); } }改成这样的写法就没问题了setTimeout(() => checkAndClick_a_dijiye(ye_num), 2500);===公众号:不浪仙人谢谢大家的支持!可以点击我的头像,进入我的空间浏览更多文章呢。建议大家360doc[www.360doc.com]注册一个账号登录,里面真的有很多优秀的文章,欢迎大家的到来。
---
联系客服