Error
常见的几种报错
1.TypeError 类型错误
2. SyntaxError 语法错误
3. RangeError 参数范围越界
4. ReferenceError 引用错误(找不到对象) 变量没有定义就使用
5. EvalError
6. URIError
1.Uncaught TypeError: Cannot read property '' of undefined
常见的一种是在渲染 UI 组件时对于状态的初始化操作不当,当你读取一个未定义的对象的属性或调用其方法时,这个错误会在 Chrome 中出现。
2.TypeError: ‘undefined’is not an object
这是在 Safari 中读取属性或调用未定义对象上的方法时发生的错误,Safari 使用了不同的错误消息提示语。
3.TypeError: 'null' is not an object
这是在 Safari 中读取属性或调用空对象上的方法时发生的错误,Safari 使用了不同的错误消息提示语。
undefined 通常是一个尚未分配的变量,而 null 表示该值为空。 要验证它们不相等,请尝试使用严格的相等运算符 ===
这种错误可能发生场景是:在加载元素之前尝试在 JavaScript 中使用元素。 因为 DOM API 对于空白的对象引用返回值为 null。
4.(unknown): Script error
当未捕获的 JavaScript 错误(通过window.onerror处理程序引发的错误,而不是捕获在try-catch中)被浏览器的跨域策略限制时,会产生这类的脚本错误。这是一种浏览器安全措施,旨在防止跨域传递数据,否则将不允许进行通信。
5.TypeError: Object doesn’t support property
这是您在调用未定义的方法时发生在 IE 中的错误。 您可以在 IE 开发者控制台中进行测试。
6.TypeError: ... is not a function
调用未定义的函数时,在 Chrome 中产生的错误
7.Uncaught RangeError: Maximum call stack
当你调用一个不终止的递归函数时或者将值传递给超出范围的函数,会报出的错,检查函数的递归调用,确保函数不是无限递归的
8. TypeError: Cannot read property ‘length’of undefined
因为读取未定义变量的长度属性,通常会在数组中找到定义的长度,但是如果数组未初始化或者变量名称在另一个上下文中隐藏,则可能会遇到此错误。
var testArray = [“Test”];
function testFunction(testArray) {
for (var i = 0; i < testArray.length; i++) {
console.log(testArray[i]);
}
}
testFunction();
当你用参数声明一个函数时,这些参数变成了函数作用域内的本地参数。这意味着即使你函数外有名为 testArray 的变量,在一个函数中具有相同名字的参数也会被视为本地参数。
9.Uncaught TypeError: Cannot set property ... of undefined
尝试访问一个未定义的变量时,它总是返回 undefined,我们不能获取或设置任何未定义的属性。
10.ReferenceError: ... is not defined
当您尝试访问未定义的变量或超出当前范围的变量时,会引发此错误。
11.Uncaught exception: ReferenceError: Cannot assign to ‘this’
尝试给一个不能被赋值的变量赋值时将发生该错误,确保不给函数函数的返回值或 this 关键字赋值。
12.Uncaught TypeError: Converting circular structure toJSON
该错误总是发生在使用 JSON.stringify 序列化一个存在循环引用的对象时,移除将要被转换为 JSON 字符串对象内部的循环引用。
13.Unexpected token ;
通常发生在缺少括号或分号时,该错误提示的行号有时并不能指向正确的位置
14.Uncaught SyntaxError: Unexpected token ILLEGAL
字符串字面量缺少闭合的引号,确保所有字符串都包含闭合的引号。
报错后的写法try catch
try {
// 可能发生错误的代码
} catch(e) {// 仅在发生错误的时候执行
// 错误处理代码
// 1.提示用户错误信息 console.log(e);
// 2.日志中进行记录
} finally {
// 无论错误是否发生,都必须执行的代码
// 比如:释放资源
}
预编译
预编译又称为预处理,是做些代码文本的替换工作。是整个编译过程的最先做的工作。
解析一:
<script>
function foo(a){
var b = a*2;
function bar(c){
console.log(a,b,c);
}
bar(b*3);
}
foo(2);
</script>
1.GO{
}
2.GO{
a : undefined;
b : undefined;
}
3.GO{
a : undefined;
b : undefined;
}
4.GO{
a : undefined;
b : undefined;
}
执行GO{
a : 2;
b : 4;
}
1.AO{
}
2.AO{
}
3.AO{
}
4.AO{
}
执行AO{
AO里面没有原数可以去GO里面找
而GO不能向AO里去找
c : 12;
}
解析二:
<script>
function fun(a) {
console.log(a);
console.log(c);
var b = 10;
var c = 20;
function d(){};
console.log(d);
var b = function (){};
console.log(b);
function c(){};
}
fun(2);
</script>
执行GO
GO{
}
1.创建fun AO
{
}
2.寻找var关键字fun AO
{
a : undefined;
b : undefined;
c : undefined;
}
3.赋值 fun() AO
{
a : undefined;
b : 10;
c : 20;
}
4.寻找function
{
a : undefined;
b : 10;
c : function c(){} ;
d : function d(){};
}
执行 fun()AO{
a : 2;
b : function (){};
c : function c(){} ;
d : function d(){};
}