Error与函数的预编译

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(){};
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值