分享

Uncaught TypeError: Cannot read properties of undefined (reading toString)

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

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多