前端开发常见bug

406 阅读1分钟

问题一: Cannot read property 'forEach' of undefined

错误描述: undefined不能读取属性forEach

  • 有问题代码:
    let arr = res.date;
    arr.forEach(function (obj) {
      let { id, publisher, author, bookname } = obj;
      let theTr = `
          <tr>
          <td>${id}</td>
          <td>${bookname}</td>
          <td>${author}</td>
          <td>${publisher}</td>
          <td>
          <a href="javascript:;" class="del">删除</a>
          </td>
          </tr>`;
      $("#tb").prepend(theTr);
    })

0.1.png

错误分析: 在第80行有问题, 查看报错的代码 是arr读取的forEach方法, 报错说arr是个undefined(说明arr变量里的值是undefined) 顺藤摸瓜: 那么观察arr的值是在上面res.date给的 那打印res观察 (很关键, 一定要学会打印) 发现res的数据在data属性上, 而非date. 发现是拼写错误

  • 解决:let arr=res.data

总结: 当发现问题后, 要学会顺腾摸瓜, 变量只是个代号, 而变量里装的什么只有打印出来才知道

问题二: 404 (Not Found)

错误描述: 没有找到你想访问的

  • 有问题代码
     axios({
     method: 'get',
     url: 'http://123.57.109.30:3006/api/getbooks2',
     params: { id: 1, bookname: '西游记' } 
     }).then(function (res) {
     console.log(res)
     })

示图

04.png

  • 错误分析:路径不对

总结: 只要再看到404, 就是你要请求的url地址不对, 具体是哪一个, 根据报错的提示行数即可找到

问题三:promise的返回值(报错情况)

  • 当构造器没有参数时 报错:Promise resolver undefined is not a function
  • 错误分析:promise的resolve方法不是一个方法
  • 问题代码
      const p1 = new Promise(){
        // 执行异步代码
        // 调用resolve,或者reject
      });
      console.dir(p1)

总结:promise要传参,这个参数是一个回调函数

  • 当promise对象的状态是rejected,且此时then方法并没有设置第二个参数,就会向外抛出一个错误.报错:Uncaught (in promise)
  • 错误分析: 没有要执行的代码
  • 问题代码
        var p = new Promise((resolve,reject)=>{
            reject(val2)
        })
        p.then(
        okVal=>{
    	console.info("成功");
    	console.log(okValue);
	})	

总结:在实现开发尽量使用fn().then().catch()这种,避免上述问题

问题四:webpack设置入口文件

  • 当设置了入口文件时,但写node命令时,加了文件夹名 报错:Unknown command or entry...
  • 错误分析:执行命令错误 npx webpack ./文件名

0.9.png

  • 解决问题:npx webpack

总结:当修改出入口文件时,执行命令npx webpack

  • 当设置入口文件时,开错了小黑窗 报错:Module not found:Error:Can't resolve './src' in...
  • 错误分析:这个模块找不到 在'./src' 里面不能决定...

10.png

  • 解决问题:在node小黑窗里cd ..到跟路径

总结:在执行node命令前,先看清楚小黑窗打开的路径

问题五:命令输错了

  • 操作小黑窗命令输错了 报错:Run vue --help...
  • 错误分析:命令输错了不知道run什么代码 vue run serve

13.png

  • 解决问题:不要慌,,仔细看报错代码,,命令已经给你了

总结:报错冷静分析报错代码

问题六:监听器-没有setter

  • 在操作数据代理时,修改了vm所代理的计算属性值
  • 错误分析:使用的是普通方法,只是执行getter(get函数) 报错: ...no setter

Snipaste_2022-05-05_15-40-10.png

  • 解决问题:使用全写方法
    computed:{
     属性名:{
     get(){
      return  读取执行的代码   },
     set(val){
      return  修改执行的代码   }
     }
     }

总结:以后直接使用全写方法

问题7:没有出现效果

  • 错误分析:在操作时没有设置接收的命令

Snipaste_2022-05-05_20-03-30.png

  • 解决问题:加上红色框里的代码

当操作input时,不要忘记需要v_model接收 (双向绑定)

问题8:$nextTick相关问题

  • 错误分析:因为数据改变后,获取不到异步代码 报错:this.$nextTick是undefined

数据更新是异步的.png

  • 解决问题:
           this.$nextTick(()=>{
             this.$refs.inp.focus()
           })