posts - 5, comments - 16, trackbacks - 0, articles - 0

          JavaScript中try...catch和異常處理

          Posted on 2006-09-05 17:56 BennyBao 閱讀(2004) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): AJAX
          在JavaScript可以使用try...catch來(lái)進(jìn)行異常處理。例如:
          try ? {
          ????foo.bar();
          }
          ? catch ?(e)?
          {
          ????alert(e.name?
          + ? " :? " ? +
          ?e.message);
          }

          目前我們可能得到的系統(tǒng)異常主要包含以下6種:
          • EvalError:?raised when an error occurs executing code in eval()
          • RangeError:?raised when a numeric variable or parameter is outside of its valid range
          • ReferenceError: raised when de-referencing an invalid reference
          • SyntaxError: raised when a syntax error occurs while parsing code in eval()
          • TypeError: raised when a variable or parameter is not a valid type
          • URIError: raised when encodeURI() or decodeURI() are passed invalid parameters

          上面的六種異常對(duì)象都繼承自Error對(duì)象。他們都支持以下兩種構(gòu)造方法:

          new ?Error();
          new ?Error( " 異常信息 " );

          手工拋出異常的方法如下:

          try ? {
          ????
          throw ? new ?Error( " Whoops! "
          );
          }
          ? catch ?(e)? {
          ????alert(e.name?
          + ? " :? " ? +
          ?e.message);
          }

          如要判斷異常信息的類(lèi)型,可在catch中進(jìn)行判斷:

          try ? {
          ????foo.bar();
          }
          ? catch ?(e)?
          {
          ????
          if ?(e? instanceof ?EvalError)?
          {
          ????????alert(e.name?
          + ? " :? " ? +
          ?e.message);
          ????}
          ? else ? if ?(e? instanceof ?RangeError)? {
          ????????alert(e.name?
          + ? " :? " ? +
          ?e.message);
          ????}

          ????
          // ??etc
          }

          Error具有下面一些主要屬性:

          • description: 錯(cuò)誤描述 (僅IE可用).
          • fileName: 出錯(cuò)的文件名 (僅Mozilla可用).
          • lineNumber: 出錯(cuò)的行數(shù) (僅Mozilla可用).
          • message: 錯(cuò)誤信息 (在IE下同description)
          • name: 錯(cuò)誤類(lèi)型.
          • number: 錯(cuò)誤代碼 (僅IE可用).
          • stack: 像Java中的Stack Trace一樣的錯(cuò)誤堆棧信息 (僅Mozilla可用).
          因此為了更好的了解錯(cuò)誤信息我們可以將catch部分改為如下形式:

          try ? {
          ????foo.bar();
          }
          ? catch ?(e)?
          {
          ????
          if ?(browserType? != ?BROWSER_IE)?
          {????????????????????????????
          ????????alert(
          ????????????
          " name:? " ? + ?e.name? +

          ????????????
          " \nmessage:? " ? + ?e.message? +
          ????????????
          " \nlineNumber:? " ? + ?e.lineNumber? +
          ????????????
          " \nfileName:? " ? + ?e.fileName? +
          ????????????
          " \nstack:? " ? + ?e.stack);????????
          ????}

          ????
          else ? {????????????????????
          ????????alert(
          ????????????
          " name:? " ? + ?e.name? +
          ????
          ????????????
          " \nerrorNumber:? " ? + ?(e.number? & ? 0xFFFF )? +

          ????????????
          " \nmessage:? " ? + ?e.message " );????????
          ????}

          }

          JavaScript中的throw命令事實(shí)上可以拋出任何對(duì)象,并且我們可以在catch接受到此對(duì)象。例如:

          try ? {
          ????
          throw ? new ?Date();???? // ?拋出當(dāng)前時(shí)間對(duì)象

          }
          ? catch ?(e)? {
          ????alert(e.toLocaleString());????
          // ?使用本地格式顯示當(dāng)前時(shí)間

          }

          Feedback

          # re: JavaScript中try...catch和異常處理  回復(fù)  更多評(píng)論   

          2009-06-21 10:55 by Daniel Hu
          這是我的整理,http://www.daniel-journey.com/archives/63 javascript異常處理使用總結(jié)
          主站蜘蛛池模板: 界首市| 巴南区| 白沙| 许昌县| 福鼎市| 安新县| 红桥区| 赤城县| 田东县| 刚察县| 丰顺县| 白水县| 沙湾县| 常熟市| 孝感市| 南丹县| 郧西县| 临清市| 北宁市| 资兴市| 石首市| 盐城市| 育儿| 崇信县| 新田县| 兴城市| 稷山县| 都江堰市| 定陶县| 和林格尔县| 宁晋县| 花垣县| 邢台县| 宁陵县| 山阳县| 额尔古纳市| 孟连| 巩义市| 越西县| 五家渠市| 高淳县|