博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript-错误与异常、 this关键字
阅读量:6044 次
发布时间:2019-06-20

本文共 2891 字,大约阅读时间需要 9 分钟。

错误与异常

错误,指程序中的非正常运行状态,在其他编程语言中称为‘异常’或,‘错误’。解释器为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信息。

通过使用JavaScript提供的异常处理语句,可以用结构优化的方式捕捉发生的错误,让异常处理代码核心业务代码实现分离。

try...catch语句

try...catch 语句作为js中处理异常的一种标准方式。try语句标记一块待尝试的语句,如果该语句出现错误,则通过catch语句进行捕捉。

try {    console.log(v);//- 调用未定义的变量,语法报错}//用于处理try中出现的错误catch (error){    //error - 表示try中出现错误的信息    console.log(error);}//终结快 - 无论catch语句是否处理了try语句中的错误与异常,都会输出finally语句中的内容finally {}

错误类型

基本错误类型

执行代码期间可能会发生的错误类型有多种种类,每种种类都有对应的错误类型。当错误发生时,就会抛出对应类型的错误对象。

Error是基本错误类型,其他错误类型都继承于该类型。Error类型的错误很少见,如果有也是浏览器抛出的,这个基本错误类型主要目的是提供给开发人员抛出自定义错误。

预定义错误类型

js提供了7种预定义错误类型

clipboard.png

抛出语句

与try...catch语句配合使用的还有throw操作符,用于随时抛出定义错误。抛出错误是,必须给throw操作符制定一个值。(值不限类型)

function fn(v) {    if (v){        return v;    }else {        throw {name : '化物语'};    }}//console.log(fn());/*        throw {name : '化物语'};        ^[object Object]*/var result;try{    result=fn();}catch (e){    result = 'aa'    console.log(e.name);//化物语}console.log(result);//aa

this关键字

概述

this是什么

this是js中最复杂的机制之一。它是一个很特别的关键字,被自动定义在所有函数的作用域中。

this都有一个共同点,他总是范慧慧一个对象。或者说,this就是属性或方法‘当前’所在的对象。

为什么使用this

this可以使API设计变得更加简洁并且易于复用。

调用位置

想要了解this的绑定过程,首先要理解调用位置:调用位置就是函数在代码中被调用的位置(不是声明的位置)。

var v = 100;function fun() {    console.log(this.v);}fun();//undefined(全局对象不可用)若全局对象可用为100var obj ={    v : 200,    f : fun   };obj.f();//200   当前this指向对象obj

绑定规则

默认绑定

在一个函数中使用this,当该函数被独立调用。可以把这条规则看作是无法应用其他规则时的默认规则。

function fun (){     console.log(this.v);//当前this指向全局对象}//全局变量var v = 2;//函数调用fun();//2  - 全局对象可用

隐式绑定

隐式绑定的规则需要考虑的是调用位置是否有上下文对象,或者说是否被某个对象拥有或者包含。(说法不准确)。

function fun (){     console.log(this.v);//当前this指向对象obj}//定义对象var obj = {   v : 23,   f : fun}obj.f();//23

隐式绑定丢失

隐式丢失是最常见的this问题,指的是被隐式绑定的函数会丢失绑定对象,也就是说会应用默认绑定,把this绑定到全局对象上。

function fun(){    console.log(this.v);}var obj {    v : 23,    f : fun}//定义一个全局变量,并赋值对象obj的f方法var foo = obj.ffoo();//undefined   - this绑定到了全局对象

显示绑定

显示绑定就是明确在调用时,this绑定的对象。可以使用apply()方法和call()方法实现。

这两个方法的第一个参数就收的是一个对象,会把这个对象绑定带this上,接着在调用函数时制定这个this。

function fun(){     console.log(this.v);};var obj {     v : 23,     f : fun};//定义一个全局变量,并赋值对象obj的f方法var foo = obj.f;foo.call(obj);//23

new绑定

在js中,构造函数只是一些使用new操作符时被调用的函数。包括内置对象函数在内的所有函数都可以用new来调用,这种函数调用被称为构造函数调用。

使用new来调用函数,会执行以下操作

  • 创建一个全新的对象
  • 这个对象会绑定到函数调用的this
  • 如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象
function Fun(name){     this.name = name};var fun  = new Fun'花';console.log(fun.name);//花

实现继承

function fun() {      this.name = '火锅';}//将fun继承于Fufunction Fu(){      fun.call(this);      this.age = 2;}var fu= new Fu();console.log(fu.name);//火锅console.log(fu.age);//2

绑定例外

被忽略的this

如果将bull或者undefined作为this的绑定对象传入call、apply、bind,这些值在调用时会被忽略,实际应用的是默认绑定规则。

function fun (){    console.log(this.v);};var v = 23 fun.call(null);//23  - 全局对象可用的情况下

间接引用

有可能有意或无意的创建一个函数的‘间接引用’,在这种情况下,调用这个函数会应用默认绑定规则。

间接引用最容易在赋值时发生。

function fun (){     console.log(this.a)}var a = 2;var o ={    a : 3,    foo = fun;};var p ={a:4};o.foo();//3(p.foo = o.foo)()//2

转载地址:http://ycfex.baihongyu.com/

你可能感兴趣的文章
一次快速的数据迁移感悟
查看>>
《ELK Stack权威指南(第2版)》一3.6 Java日志
查看>>
C++流的streambuf详解及TCP流的实现
查看>>
《量化金融R语言初级教程》一2.5 协方差矩阵中的噪声
查看>>
beetl 和 shrio 结合
查看>>
相对/绝对路径,cd命令,mkdir/rmdir命令,rm命令
查看>>
tomcat中web.xml各配置项的意义
查看>>
Nodejs学习笔记(二):《node.js开发指南》代码中需要注意的几点
查看>>
Ztree异步加载自动展开节点
查看>>
反射操作公共成员变量
查看>>
Android热修复升级探索——代码修复冷启动方案
查看>>
学校宿舍的深夜之思考
查看>>
字符串的扩展
查看>>
存储过程中调用webservice
查看>>
神奇语言 python 初识函数
查看>>
Windows安装Composer出现【Composer Security Warning】警告
查看>>
企业架构研究总结(22)——TOGAF架构开发方法(ADM)之信息系统架构阶段
查看>>
linux
查看>>
C#+QQEmail自动发送邮件
查看>>
[Hadoop]MapReduce多输出
查看>>