JavaScript Error对象详解

时间: 2018-06-25阅读: 1624标签: 对象

一、概念

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

ECMAScript定义了六种类型的错误。除此之外,还可以使用Error构造方法创建自定义的Error对象,并使用throw语句抛出该对象。

六种错误:

  • ReferenceError:找不到对象时
  • TypeError:错误的使用了类型或对象的方法时
  • RangeError:使用内置对象的方法时,参数超范围
  • SyntaxError:语法写错了
  • EvalError:错误的使用了Eval   
  • URIError:URI错误

 

二、错误处理

即使程序发生错误,也保证不异常中断的机制。

try{
    可能发生错误的代码
}catch(err){
    只有发生错误时才执行的代码
}finally{
    无论是否出错,肯定都要执行的代码
}


使用要点:

  • 使用try包裹的代码,即使不出错,效率也比不用try包裹的代码低;
  • 在try中,尽量少的包含可能出错的代码;
  • 无法提前预知错误类型的错误,必须用try catch捕获;
  • finally可以省略;

 

三、抛出自定义错误

何时:如果函数的定义者,需要告知调用者使用过程中的错误;

如何:throw new Error("提示文字");

// 程序猿甲:定义函数的人
function round(num, d){
    if(!isNaN(num) && !isNaN(d)){
        num *= Math.pow(10, d);
        return num;
    }else{
        // 抛出自定义错误
        throw new Error("参数必须是数字");  
    }
}

// 程序猿乙:调用函数的人
var d = parseInt(prompt('请输入数字'));
try{
    alert(round(123.456, d));
}catch(err){
    alert(err.message);  // 接住抛出的自定义错误
}


 

四、实例练习

var n = 1;
function fun(){
    try{
        n++;
        return n;
    }catch(err){    
        // 没错误,catch不执行
        n++;
        return n;    
    }finally{
        n++;
        return n;
    }
}

console.log(fun());// 3  return为finally的
console.log(n);// 3


var n = 1;
function fun(){
    try{
        n++;
        return n;
    }catch(err){
        // 没错误,catch不执行
        n++;
        return n;
    }finally{
        n++;
    }
}
console.log(fun()); // 2  return为try的
console.log(n); // 3


 

var n = 1;
function fun(){
    try{
        n++;
        n += m;  //出错
        return n;   
    }catch(err){
        n++;
        return n;
    }finally{
        n++;
    }
}
console.log(fun());    // 3 return为catch的
console.log(n);        // 4


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/892

js内置对象

在js里,一切皆为或者皆可以被用作对象。可通过new一个对象或者直接以字面量形式创建变量,所有变量都有对象的性质。JS中常用的内置对象:Array对象、Date对象、正则表达式对象、string对象、Global对象

js获取object对象的长度

我们都知道必须是具体数据类型才有长度,所以size和length都无法测量object对象的长度,那么如何计算对象的长度,即获取对象属性的个数呢?

简单实现在Js中克隆对象

JavaScript 的原始数据类型(例如number、string、null,undefined 和 boolean)是不可变的,这意味着一旦创建,它们的值就无法更改。但是对象和数组是可变的,允许在创建后修改其值。实际上,这意味着基元是通过值传递的

JS对象属性排序的小技巧

数组对象去重的时候,如果由于对象里面的内容是一样,但是属性位置不一样,从而导致我们可能出现无法去重,虽然JSON.stringify()的第二个参数能够自行添加属性到数组里面,但有可能出现我们并不知道对象具体有哪些属性

Js判断对象和数组

在调用后端接口时,由于后端接口的不规范统一,接口最外层在没有数据时返回的是空数组(其实更想要的是空json对象,接口返回的data数据应该统一返回json对象,便于扩展),而在有数据时返回的是json对象

可以迭代大部分数据类型的 for…of 为什么不能遍历普通对象?

我们知道,ES6 中引入 for...of 循环,很多时候用以替代 for...in 和 forEach() ,并支持新的迭代协议。for...of 允许你遍历 Array(数组), String(字符串), Map(映射), Set(集合),TypedArray(类型化数组)、arguments、NodeList对象

HTML5 History API 和 Location 对象剖析

这次也不长篇大论,只搞清楚两件事 —— History API & Location 对象。了解清楚这些,将能够使我们在不同 web 页面之间穿梭自如。

使用Js的Proxy监听对象属性变化并进行类public/private的访问控制

Proxy是ES6的引入的一个对象监听机制。可视为JavaScript对象的一个代理中间件。用户在访问对象时,会触发自定义行为。Proxy最简单的用法是可以监听对象属性的变化

JavaScript 的代理对象

JavaScript 支持 setters 和 getters 已经很长时间了。他们用带有 set 和 get 关键字的简单语法来拦截对象的属性访问和值的修改操作。

JS声明对象时属性名加引号与不加引号的问题

JS声明对象时属性名加引号与不加引号的问题,一般情况下属性名加引号和不加引号是都可以的,效果是一样的。如果属性名是数字,则必须用“”包围,并且用 [] 方括号访问。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!