1.错误信息

SyntaxError 语法错误

  1. var 1=1;

image.png
image.png
未被捕获的语法错误:意思是这是js系统机制自动抛出来的
意外的数字:

  1. var 1ab=1;
  2. function 1test(){}

image.png
Invalid 非法的无效的 意外的标记:就是1ab

关键字赋值

  1. new =1;
  2. function=1;

image.png

基本的语法错误

  1. var a=5:

image.png

2.ReferenceError引用错误

变量或者函数未被声明

  1. test()

image.png
test未定义

给无法被赋值的对象赋值的时候

  1. var a=1=2;

image.png
无效的左侧赋值,一般这种情况都是赋值出现了问题
assignment:任务布置

  1. var a=1;
  2. console.log(a)=1

image.png

3.RangeError 范围错误

数组长度赋值为负数
image.png
image.png
image.png
image.png

image.png
image.png

4.TypeError 类型错误

image.png
image.png
先检查123是不是function命名的方式,再运行123()函数
image.png
image.png
没写方法,认为obj.say是属性名,属性不是方法,后面不能跟()
写obj.say不会报错

实例化原始值

image.png

  1. var a=new 123;

image.png
new要跟着函数,函数有构造器

5. URIError URI错误



image.png
uri包含url和urn和其他

  1. // 5. URIError URI错误
  2. //URI: UNIFError URI错误
  3. //URI:UNIFORM RESOURCE IDENTIFIER
  4. // 统一资源标识符
  5. //URN: UNIFORM RESOURCE LOCATOR
  6. // 统一资源定位符
  7. //URL: UNIFORM RESOURCE NAME
  8. // 统一资源名称
  9. //URL:http://www.baidu.com/news#today
  10. // ftp://www.baidu.com/ftp#developer
  11. //URN: www.baidu.com/ftp#developer -> ID
  12. // href="tel:13900000000"
  13. // href='mailto:523579987@qq.com'
  14. var myUrl = 'http://www.baidu.cin?name=艾小野';
  15. var newUrl = encodeURI(myUrl);
  16. console.log(newUrl);//
  17. var newNewUrl = decodeURI(newUrl);
  18. console.log(newNewUrl);

image.png
变成编码
image.png
image.png
image.png
乱写的,没有办法解析

6.EvalError
  1. 创建一个error实例,表示错误的原因:与 eval() 有关。

image.png
image.png1
image.png
image.png
eval(obj)没有冒号依然可以运行,结果一样
image.png
a与”a”一样,默认·转换成”a”,这个也是json对象,json字符串,在{}两边加上’’,’{….}’就变成了json字符串
image.png
不是json对象了,json对象中不能有方法func,普通对象

json对象传数据
image.png
image.png
json字符串

image.png
image.png
image.png
image.png
不推荐用eval
性能问题

  1. //1.SyntaxError 语法错误
  2. var 1 = 1;
  3. var 1ab = 1;
  4. // 关键字赋值
  5. new = 5;
  6. function = 1;
  7. // 基本的语法错误
  8. var a = 5;
  9. // 2.ReferenceError
  10. //变量或者函数未被声明
  11. test();
  12. //给无法被赋值的对象赋值的时候
  13. var a = 1 =2;
  14. var a = 1;
  15. console.log(a) = 1;
  16. // JS错误信息类型
  17. // 3.RangeError 范围错误
  18. // 数组长度赋值为负数
  19. var arr = [1,2,3];
  20. arr.length=-1;
  21. console.log(arr);
  22. // 对象方法参数超出可行范围
  23. var num = new Number(66.66);
  24. console.log(num.toFixed(-1));
  25. // 4.TypeError 类型错误
  26. // 调用不存在的方法
  27. 123();
  28. var obj = {};
  29. // obj.say 不会报错因为浏览器会认为是一个属性没有赋值但是obj.say()报错是一个属性不是fn(){}
  30. obj.say();
  31. // 实例化原始值
  32. var a = new 'string';
  33. var a = new 123;
  34. // 5. URIError URI错误
  35. //URI: UNIFError URI错误
  36. //URI:UNIFORM RESOURCE IDENTIFIER
  37. // 统一资源标识符
  38. //URN: UNIFORM RESOURCE LOCATOR
  39. // 统一资源定位符
  40. //URL: UNIFORM RESOURCE NAME
  41. // 统一资源名称
  42. //URL:http://www.baidu.com/news#today
  43. // ftp://www.baidu.com/ftp#developer
  44. //URN: www.baidu.com/ftp#developer -> ID
  45. // href="tel:13900000000"
  46. // href='mailto:523579987@qq.com'
  47. var myUrl = 'http://www.baidu.cin?name=艾小野';
  48. var newUrl = encodeURI(myUrl);
  49. console.log(newUrl);
  50. var newNewUrl = decodeURI(newUrl);
  51. console.log(newNewUrl);
  52. //6.EvalError
  53. 创建一个error实例,表示错误的原因:与 eval() 有关。

2.try_catch

try语句包含了由一个或者多个语句组成的try块, 和至少一个catch块或者一个finally块的其中一个,或者两个兼有, 下面是三种形式的try声明:

  1. try...catch
  2. try...finally
  3. try...catch...finally

catch子句包含try块中抛出异常时要执行的语句。也就是,你想让try语句中的内容成功, 如果没成功,你想控制接下来发生的事情,这时你可以在catch语句中实现。 如果在try块中有任何一个语句(或者从try块中调用的函数)抛出异常,控制立即转向catch子句。如果在try块中没有异常抛出,会跳过catch子句。
finally子句在try块和catch块之后执行但是在下一个try声明之前执行。无论是否有异常抛出或捕获它总是执行。

image.png
image.png
如果发生错误接下来的就不会执行

之前的是js引擎,系统为我们自动抛出来错误,我们也可以手动抛出错误

可以实例化错误
image.png
image.png
image.png
image.png
try里面程序正常执行不会打印catch里面的语句

image.png
image.png
不管try里面有没有错finally里面的语句都会执行,接下来的语句也会执行,不受错误的影响

image.png
image.png

image.png

image.png
throw抛出的信息,就是e,可以自定义抛出的信息

  1. try{
  2. console.log('正常执行1');
  3. console.log('a');
  4. console.log('b');
  5. console.log('正常执行2');
  6. }catch(e){
  7. console.log(e.name+':'+e.message);
  8. }finally{
  9. console.log('正常执行3');
  10. }
  11. console.log('正常执行4');
  12. var jsonStr = '';
  13. try{
  14. if(jsonStr == ''){
  15. throw 'JSON字符串为空';
  16. }
  17. console.log('我要执行了');
  18. var json = JSON.parse(jsonStr);
  19. console.log(json);
  20. }catch(e){
  21. console.log(e);
  22. var errorTip ={
  23. name:'数据传输失败',
  24. errorCode:'10010'
  25. }
  26. console.log(errorTip);
  27. }

image.png

3.严格模式

  1. ES5 正常模式 严格模式<br /> IE9及以下IE<br /> 3.0 -> 严格模式<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/351800/1643778840653-520388e1-2fd2-4d85-b472-a54b6ac74d1a.png#clientId=ua2d35ca8-dc4d-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=349&id=u0ea0a78c&margin=%5Bobject%20Object%5D&name=image.png&originHeight=349&originWidth=505&originalType=binary&ratio=1&rotation=0&showTitle=false&size=146795&status=done&style=none&taskId=uf2f95ef4-4ae2-44b4-bf65-3b6ed0a78de&title=&width=505)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/351800/1643779097032-ee13053d-1a31-4ace-afef-6f2abd389682.png#clientId=ua2d35ca8-dc4d-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=104&id=u1f883570&margin=%5Bobject%20Object%5D&name=image.png&originHeight=104&originWidth=313&originalType=binary&ratio=1&rotation=0&showTitle=false&size=40945&status=done&style=none&taskId=u00343136-5452-4294-b061-c4d5b8721f0&title=&width=313)<br />严格模式以es5的规范写代码,es3.0的代码有可能报错<br />用字符串调用严格模式,字符串是表达式,123也是表达式,不会报错
  1. //严格模式的三种写法
  2. 'use strict'; //全局写法
  3. function test() {
  4. 'use strict'; //局部函数写法
  5. }
  6. var test = (function () {
  7. 'use strict'; //局部函数写法
  8. })();

caller callee 严格模式下不可用

  1. 'use strict';
  2. function test1(){
  3. test2();
  4. }
  5. test1();
  6. function test2(){
  7. console.log(test2.caller);
  8. }

image.png

with 改变作用域 严格模式下不可用

改变作用域消耗性能

  1. 非严格模式下
  2. var a = 1;
  3. var obj ={
  4. a:2
  5. }
  6. function test() {
  7. var a = 3;
  8. with(window){
  9. console.log(a); //1
  10. }
  11. }
  12. test();
  13. 严格模式下
  14. 报错

image.png

解决命名空间重复的问题

  1. window.onload = function () {
  2. init();
  3. }
  4. function init() {
  5. initSlider;
  6. initSideBar;
  7. }
  8. var initSlider = (function () {
  9. var a = 1;
  10. console.log(a);
  11. })();
  12. var initSideBar = (function () {
  13. var a = 2;
  14. console.log(a);
  15. })();

以前的解决方法
对象来写->立即执行函数作用域->webpack
image.png

  1. var namespace = {
  2. header: {
  3. Jenny: {
  4. a: 1,
  5. b: 2
  6. },
  7. Ben: {
  8. a: 3,
  9. b: 4
  10. }
  11. },
  12. sideBar: {
  13. Crystal: {
  14. a: 5,
  15. b: 6
  16. }
  17. }
  18. }
  19. with(namespace.header.Ben){ //**
  20. console.log(a);
  21. }
  1. //严格模式下
  2. 'use strict';
  3. a = 1; //报错
  4. var a = b = 1; //报错
  5. function test(){
  6. console.log(this); //严格模式下this必须声明
  7. }
  8. test();//undefined
  9. test.call(1); // 1
  10. // 函数的参数不能重复
  11. function test(a,a){
  12. console.log(a);
  13. }
  14. test(1,2);
  15. //不会报错
  16. var obj = {
  17. a:1,
  18. a:2
  19. }
  20. console.log(obj.a);
  21. eval('var a = 1;console.log(a)'); //非严格模式下 eval是全局windows
  22. //严格模式下 eval有自己的作用域
  23. console.log(a); //报错
  24. //非严格模式下
  25. a = 1; //报错
  26. var a = b = 1; //报错
  27. function test(){
  28. console.log(this); //严格模式下this必须声明 undefined
  29. }
  30. test();//window
  31. test.call(1); // Number{1}

image.png
image.png
image.png
image.png
严格模式下是错的,因为严格模式下,eval也有作用域
正常模式,非严格模式是对的,打印1 ,a=1