JavaScript语言精粹3异常,扩充类型功能

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>
原文地址:https://www.cnblogs.com/concentration-web/p/6351217.html