javascript提供了一套异常处理机制。所谓异常,是指干扰程序的正常流程的,不寻常(并非,完全出乎意料的)的事故。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>抛出异常</title> 6 </head> 7 <body> 8 9 </body> 10 </html> 11 <script type="text/javascript"> 12 //javascript提供了一套异常处理机制。所谓异常,是指干扰程序的正常流程的,不寻常(并非,完全出乎意料的)的事故。 13 //当发生这样的事故,则需要抛出这个异常 14 var add = function(a,b){ 15 //传人参数,有个不是number类型,则NaN 16 if(typeof a != 'number' || typeof b != 'number' ){ 17 //throw 生成一个可由 try{} catch{}语句处理的异常(例外) 18 //throw (exception) exception可以是,字符串 throw "This is a execption"; throw 500; 可以是数字,逻辑值或者对象! 19 //此处 throw 抛出的是个异常对象,该对象有name message属性 20 throw { 21 name: 'TypeError', 22 message: 'add needs number' 23 }; 24 return a+b; 25 } 26 //throw中断函数的执行,它应该抛出一个exception对象,该对象包含一个识别异常类型的name属性和一个描述异常的message属性,可以添加其他属性 27 28 } 29 //抛出的对象将被传递到,一个try语句的catch从句 30 //创建一个try_it函数,以不正确的参数调用add函数 31 var try_it = function(){ 32 try { 33 add('seven'); 34 }catch (e){ 35 document.writeln(e.name+": "+e.message); 36 } 37 }; 38 39 //e即throw语句定义抛出的对象,在try{}运行函数,在catch{}里处理异常 40 41 try_it();//TypeErro: add needs number 42 //如果try代码块中抛出一个异常,控制权会跳转它的catch从句上 43 //----一个try语句,只会有一个,捕获所有异常的catch代码块,如果处理手段,取决于异常类型,则异常处理器,必须检查,对异常象的name属性来确定异常类型!! 44 </script>
扩充类型的功能 Argumenting Types
JavaScript允许给语言基本类型扩充功能。通过Object.prototype添加方法,可以让方法对所有对象,都适用。同理,对函数,数组,字符串,数字,布尔值。正则表达式同样适用。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>扩充类型</title> 6 </head> 7 <body> 8 9 </body> 10 </html> 11 <script type="text/javascript"> 12 //JavaScript允许给语言基本类型扩充功能。通过Object.prototype添加方法,可以让方法对所有对象,都有用。 13 //同理,对函数,数组,字符串,数字,布尔值。正则表达式同样适用。 14 15 //给Function.prototype添加方法,使该方法,对所有函数都可用 16 //给Fuction.prototype增加一个method方法,下次给对象增加方法时,不用键入prototype 17 //参数name是字符串,不能用.符号取属性,所以用[]。参数func不能是关键字!! 18 Function.prototype.method = function(name,func){ 19 //即建了一个类库,务必小心,库中存在的属性函数 20 if(!this.prototype[name]){ 21 this.prototype[name] = func; 22 } 23 return this; 24 }; 25 //增加一个给Number取整数部分的方法 26 //给Number.prototype增加一个integer方法,所有Number类型的对象都可用这个方法 27 Number.method('integer',function (){ 28 //提取数字的整数部分,负数的话用ceil(-5.9) 即 -5 向上舍入,取大的值所以是 -5,那么整数部分即保持5 29 //正数用ceil(5.9) 即 6, 取到不是整数部分,所以正数选用floor(5.9),向下舍入即5 30 return Math[this<0 ? 'ceil' : 'floor'](this); 31 }); 32 document.writeln((-10/3).integer());//-3 33 document.writeln((5.9).integer());//5 34 35 //Number Array 是函数类型,new调用的时候即类似构造器函数建了一个函数类的对象实例! 36 console.log(typeof Number,typeof Array);//function function 37 38 //test一下数组函数对象 39 Array.method('sum',function(){ 40 var sum =0; 41 for(var i=0;i<this.length;i++){ 42 sum += this[i]; 43 } 44 return sum; 45 }); 46 //Array的实例都有,都可用这个求和方法 47 var arr = [6,8,10]; 48 var arr2 = new Array(2,4,6); 49 console.log(arr.sum());//24 50 console.log(arr2.sum());//12 51 52 53 </script>
补充一个关于用[]调取属性,关于Math对象中易混的属性方法
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>MathFunctionElse</title> 6 </head> 7 <body> 8 9 </body> 10 </html> 11 <script type="text/javascript"> 12 var num0 = Math.ceil(1.4);//ceil向上取值,不是四舍五入!! round(1.4)是四舍五入 13 var num = Math['ceil'](1.4); //Math的属性有ceil方法,这里用["ceil"]调取 14 console.log(num0);//2 15 console.log(num);//2 16 console.log(Math.round(1.4));//1 17 18 var myOject = { 19 "first_name": "Mike", 20 "middle_name": "Tommy", 21 "last_neme": "Jack", 22 23 "printName": function(){ 24 // console.log(this."first_name");//不能点取,代字符串命名的属性! 25 console.log(this["first_name"],this["middle_name"],this["last_neme"]); 26 } 27 28 }; 29 myOject.printName();//Mike Tommy Jack 30 31 </script>