IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 十八、错误信息、try_catch、严格模式、变量的生命周期、垃圾回收原理 -> 正文阅读

[JavaScript知识库]十八、错误信息、try_catch、严格模式、变量的生命周期、垃圾回收原理

十八、错误信息、try_catch、严格模式、变量的生命周期、垃圾回收原理

一、错误信息

1.1 SynatxError 语法错误

// 变量名不规范
var 1 = 1;
var 1ab = 1;
// 关键字赋值
new = 5;
function = 1;
// 基本的语法错误
var a = 5:
function 1test() {}

1.2 RefrenceError引用错误

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

1.3 RangeError范围错误

// 数组长度赋值为负数
var arr = [1, 2, 3];
arr.length = -1;
console.log(arr);
// 对象方法参数超出可行范围
var num = new Number(66.66);
console.log(num.toFixed(-1));

1.4 TypeError类型错误

// 调用不存在的方法
123();
var obj = {};
obj.say();
var a = new 'string';

1.5 URIError URI错误

URI:UNIFORM RESOURCE IDENTIFIER统一资源标识符

URL:UNIFORM RESOURCE LOCATOR统一资源定位符

URN:UNIFORM RESOURCE NAME统一资源名称

var myUrl = 'http://www.baidu.com?name=你好哈哈';
var newUrl = encodeURI(myUrl);
console.log(newUrl);
var newNewUrl = decodeURI(newUrl);
console.log(newNewUrl);

var str = decodeURI('%fdsdf%');

1.6 EvalError eval函数执行错误

eval('var a = 1; console.log(a)');

var obj = {
  a: 1,
  b: 2
};

console.log(eval('obj'));

var error = new Error('代码错误了');
console.log(error);

二、try_catch

系统自动抛出错误:

console.log('正常执行1');
console.log(a); // ReferenceError
console.log('非正常执行'); // 不执行

手动抛出错误的方法:try catch finally throw

try {
  console.log('正常执行1');
  console.log(a); // 执行报错
  console.log(b); // 不执行
  console.log('正常执行2');
} catch (error) {
  console.log(error.name + ':' + error.message);
} finally {
  console.log('正常执行3');
}

console.log('正常执行4');
// JSON字符串
var jsonStr = '';

try {
  if (jsonStr == '') {
    throw 'JSON字符串为空';
  }
  console.log('我要执行啦!!!!');
  var json = JSON.parse(jsonStr);
  console.log(json);
} catch (error) {
  console.log(error);
  var errorTip = {
    name: '数据传输失败',
    errorCode: '10010'
  }
  console.log(errorTip);
}

三、ES5严格模式

3.1 定义

'use strict'

书写位置:

  • <script>内部首句
  • 函数首句
  • IIFE首句

3.2 特性

  • 严格模式下,不允许使用with语句。

    普通模式下with作用:改变内部代码所执行时作用域链的顶部位置

    以下代码中把{}的作用域链最顶端改成window,然后才是函数test的AO。

    var a = 5;
    function test(){
        var a = 10;
        var b = 7;
        with(window){
    		console.log(a);
            console.log(b);
        }
    }
    test(); //5   7
    
  • 严格模式下,函数中的this的值为undefined。new 函数this指向实例化对象这个与非严相同。

  • this的赋值必须通过call。 严格模式下,this赋值原始值就原始值,普通模式为包装类对象。

    • 非严格this赋值

      function test(){
        console.log(this);
      }
      test.call(1); //Number {1}
      
    • 严格模式this赋值

      'use strict'
      function test(){
          console.log(this);
      }
      test.call(1); // 1
      
  • 严格模式下,arguments.callee,arguments.caller,arguments properties不允许

  • 严格模式下,不写var,直接声明a = 1不允许。变量提升没问题。

  • 严格模式下,函数参数不能重复——>报错;对象属性不能重复——>规定,但不报错。

  • 严格模式下,eval有自己的作用域,不再是全局。

四、变量的生命周期

  • 全局变量的生命周期:浏览器页面关闭前一直存在——>无需讨论。

  • 局部变量的生命周期:函数执行的过程中存在。特例:闭包!

    function test1(){
        function test2(){
            a++;
            console.log(a);
        }
        var a = 1;
        return test2;
    }
    
    var test3 = test1();
    test3(); //2
    test3(); //3
    test3(); //4
    test3(); //5
    

    test3执行结束,test2的AO被释放了,但是原来test1的AO仍然存在,且被test2连着。

    这里test2拿到的是test1的AO引用;如何解除引用(闭包的引用):

    test3 = null;
    

五、垃圾回收原理

js不需要手动进行垃圾回收——>内存回收。

垃圾回收原理过程:

  1. 找出不再使用的变量
  2. 释放其占用的内存
  3. 固定的时间间隔运行

5.1 垃圾回收策略

5.1.1 ※标记清除:mark and sweep

给变量添加一个标记。

function test(){
    var a = 0; //进入环境
}
test(); //离开环境

特性:

  1. 周期性
  2. 排除全局变量、排除闭包不释放AO中的变量;
  3. 再看到有离开环境的标记,就把这个变量清除掉,回收它们所占内存空间。

注:不同浏览器,标记的形式不同;垃圾回收的机制不同。策略一样:标记清除。

5.1.2 引用计数:reference counting(了解)

记录每个引用值次数,为0清理。

function test(){
    var a = new Object(); //a的引用次数1
    var b = new Object();

    var c = a;//a的引用次数+1
    var c = b;//a的引用次数-1,b的引用次数+1

    // 清除引用(引用清除)
    a = null;
    b = null;
}
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 12:57:45  更:2022-01-16 12:59:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:03:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码