zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    从百度文库下载的文档无法打开解决办法
    1
    sqlserver 或者 oracle 查询每科成绩前三名问题
    深度复制
    java 环境搭建
    我的小黑屋
    SQLSERVER 批量去掉外键约束
    linux mingling
    easyui datagrid 自定义editor并根据实际情况(自定义options)判断返回多样的html控件
    sqlserver 循环加类型转换拼接
  • 原文地址:https://www.cnblogs.com/concentration-web/p/6351217.html
Copyright © 2011-2022 走看看