js常见的9种报错记录一下

Posted 爱学习的Akali King

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js常见的9种报错记录一下相关的知识,希望对你有一定的参考价值。

js常见报错

javascript语言中,常常会出现各种类型的错误,包括语法错误、运行时错误、逻辑错误等。Error实例对象是最一般的错误类型,在它的基础上,JavaScript 还定义了其他6种错误对象。以下是常见的报错:

语法错误(SyntaxError)

语法错误通常是由于代码中存在语法错误导致的,例如括号不匹配、缺少分号等。

示例:

// 括号不匹配
if (a === b 
  console.log('a等于b');


// 变量未声明
console.log(c);

解决办法:
检查代码中是否有括号不匹配、缺少分号等语法错误。


类型错误(TypeError)

类型错误通常是由于代码中使用了不正确的数据类型或方法导致的,例如将一个数字当作函数使用、一个数组访问不存在的元素等。

示例:

// 类型错误示例
let a = 10;
a();

解决办法:
检查代码中使用的数据类型和方法是否正确。


引用错误(ReferenceError)

引用错误通常是由于使用了未定义的变量或方法导致的,例如访问一个未定义的变量、调用一个未定义的函数等。

示例:

// 引用错误示例
console.log(a);

function add(a, b) 
  return c;

解决办法:
检查代码中是否存在未定义的变量或方法。


范围错误(RangeError)

范围错误通常是由于使用了超出范围的值导致的,例如使用一个超出数组长度的索引、使用一个超出数字范围的值等。

示例:

// 数组长度不得为负数
// new Array(-1)

解决办法:
检查代码中使用的值是否超出了范围。


运行时错误(RuntimeError)

运行时错误通常是由于代码中存在逻辑错误导致的,例如除以0、无限递归等。

示例:

// 运行时错误示例
let a = 10 / 0;
console.log(a);   //无穷   Infinity

//无限递归
function foo() 
  foo();

foo();

解决办法:
检查代码中的逻辑是否正确,并进行修改。


网络错误(NetworkError)

网络错误通常是由于网络连接失败导致的,比如请求一个不存在的URL或者网络连接不稳定。

解决方法:
检查网络连接是否正常,修正错误。


内部错误(InternalError)

InternalError 对象表示出现在 JavaScript 引擎内部的错误。通常描述某种数量过多的情况,例如:

“too many switch cases”(过多 case 子句);
“too many parentheses in regular expression”(正则表达式中括号过多);
“array initializer too large”(数组初始化器过大);
“too much recursion”(递归过深)。

解决方法:
检查代码中的逻辑是否正确,修正错误。


URI错误(URIError)

当代码中使用了不合法的URI时,会抛出URIError错误。


eval错误(EvalError)

当代码中使用了eval函数时发生错误时,会抛出EvalError错误。


总之,要避免JavaScript错误,就需要编写规范的代码并进行严格的测试和调试。如果出现错误,就需要仔细分析错误信息并进行相应的修复。

javaScript中常见的几种报错类型

 
一般我们运行代码的时候,在控制台报错会相应的显示你错误的行数,找到那一行,查找你相应的错误
1、xxx is not defined
 
xxx 没有定义  
 
 
2、xxx is not a function
 
xxx 不是一个函数
xxx此时是undefined
 
3、Cannot read property ‘xxx‘ of undefined
 
不能读取undefined的xxx属性
 
xxx前面的变量是undefined
 
 
4、Cannot set property ‘xxx‘ of null
 
不能给null设置xxx属性
 
xxx前面的变量是null
 
 
5、Invalid or unexpected token
 
标点符号可能是中文
 
6、Unexpected token a in JSON at position 0
 
使用JSON.parse进行解析json字符串时,解析的内容不合法
 
7、XMLHttpRequest cannot load http://XXXXXX. No ‘Access-Control-Allow-Origin‘ header is present on the requested resource. Origin ‘http://XXXXXX‘ is therefore not allowed access.
 
使用ajax请求数据时,产生跨域了
 
8、Illegal break statement
 
出现了非法语句
 
 
9、SyntaxError(语法错误)
 
SyntaxError是解析代码时发生的语法错误
// 变量名错误
var 1a; 
// 缺少括号
console.log (‘hello‘;
 
10、ReferenceErro(引用错误)
 
ReferenceError是引用一个不存在的变量时发生的错误。
 
unknownVariable
// ReferenceError: unknownVariable is not defined
 
另一种触发场景是,将一个值分配给无法分配的对象,比如对函数的运行结果或者this赋值。
 
console.log() = 1
// ReferenceError: Invalid left-hand side in assignment this = 1
// ReferenceError: Invalid left-hand side in assignment
 
上面代码对函数console.log的运行结果和this赋值,结果都引发了ReferenceError错误
 
11、RangeError(范围错误)
 
RangeError是当一个值超出有效范围时发生的错误。主要有几种情况,一是数组长度为负数,二是Number对象的方法参数超出范围,以及函数堆栈超过最大值。
 
new Array(-1)
// RangeError: Invalid array length
(1234).toExponential(21)
// RangeError: toExponential() argument must be between 0 and 20
 
12、TypeError(类型错误)
 
TypeError是变量或参数不是预期类型时发生的错误。比如,对字符串、布尔值、数值等原始类型的值使用new命令,就会抛出这种错误,因为new命令的参数应该是一个构造函数。
 
new 123
//TypeError: number is not a func var obj = {}; obj.unknownMethod()
// TypeError: undefined is not a function
 
上面代码的第二种情况,调用对象不存在的方法,会抛出TypeError错误。
 
13、URIError(URI错误)
 
URIError是URI相关函数的参数不正确时抛出的错误,主要涉及encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()这六个函数。
 
decodeURI(‘%2‘)
// URIError: URI malformed
 
14、EvalError(eval错误)
 
eval函数没有被正确执行时,会抛出EvalError错误。该错误类型已经不再在ES5中出现了,只是为了保证与以前代码兼容,才继续保留。
 
以上这6种派生错误,连同原始的Error对象,都是构造函数。开发者可以使用它们,人为生成错误对象的实例。
 
new Error("出错了!");
new RangeError("出错了,变量超出有效范围!");
new TypeError("出错了,变量类型无效!");
 
上面代码表示新建错误对象的实例,实质就是手动抛出错误。可以看到,错误对象的构造函数接受一个参数,代表错误提示信息(message)。
 
15、错误举例
 
  • 找不到引入的.js文件
 
引用的.js文件找不到,chrome报错信息如下:
GET file:///D:/JavaBooks/js/jquery%20validation/src-gzh/jquery.validate-1.7.src net::ERR_FILE_NOT_FOUND
 
可能原因:.js文件名字拼写错误(比如,少了文件后缀.js)
 
  • js函数缺少括号),函数体缺少大括号}
如果函数缺少括号或者函数体缺少括号,浏览器debug时都会提示报错信息。这里分2种情况:
1、一般报错信息都在报在错误的地方,这种情况比较好说。
2、但是有的时候会报在其他的地方,这个时候要明白的是,报错信息缺少括号这一点是确定无疑的,现在就是要定位到具体是哪一行报错。
 
例如
报错函数/函数体缺少括号,报错的地方不是函数/函数体的末尾,而是报在调用该函数的地方。
 
  • css代码使用了//注释,导致有的div内容出不来,然后也不报错
css注释,只能使用/* 注释内容 */,而不能使用双斜杠//。
 
  • 定义了多个同名的变量
浏览器会报错。
 
  • 文档未加载完毕,就开始执行js代码导致的错误
文档/DOM未加载完毕,就开始执行js代码。
 
比如,js代码写在html代码的前面,而且document.getElementById(‘traffic‘)这样来访问DOM(即文档的元素),那么这个时候就会报TypeError: a is null(火狐浏览器,注:a变量没用,只会起误导作用)或者Uncaught TypeError: Cannot read property ‘click2‘ of null(谷歌浏览器)。
 
  • js 对象的函数未定义
浏览器报错,说对象的函数未定义,这个时候可以肯定的一点是,当前这个对象是没有这个函数的。
 
比如,高德地图对象函数未定义,是因为地图对象被2.5维地图对象覆盖了。
出现这种bug时,问题在函数,往往是因为对象被重复定义,或者被重新赋值了。








以上是关于js常见的9种报错记录一下的主要内容,如果未能解决你的问题,请参考以下文章

Js常见的六种报错

前端JavaScript 常见的报错及异常捕获

Node.js 中 fs.renameSync 报错

MySQL中遇到的几种报错及其解决方法

docker login harbor两种报错

[Javascript摸鱼记录] 关于js简单字符删减替换增加插入追加前中后处理