表白:黑白圣堂血天使,天剑鬼刀阿修罗。 讲解对象:/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]注册一个账号登录,里面真的有很多优秀的文章,欢迎大家的到来。 --- ';
|