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

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

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

          目前我們可能得到的系統異常主要包含以下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

          上面的六種異常對象都繼承自Error對象。他們都支持以下兩種構造方法:

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

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

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

          如要判斷異常信息的類型,可在catch中進行判斷:

          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: 錯誤描述 (僅IE可用).
          • fileName: 出錯的文件名 (僅Mozilla可用).
          • lineNumber: 出錯的行數 (僅Mozilla可用).
          • message: 錯誤信息 (在IE下同description)
          • name: 錯誤類型.
          • number: 錯誤代碼 (僅IE可用).
          • stack: 像Java中的Stack Trace一樣的錯誤堆棧信息 (僅Mozilla可用).
          因此為了更好的了解錯誤信息我們可以將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命令事實上可以拋出任何對象,并且我們可以在catch接受到此對象。例如:

          try ? {
          ????
          throw ? new ?Date();???? // ?拋出當前時間對象

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

          }

          Feedback

          # re: JavaScript中try...catch和異常處理  回復  更多評論   

          2009-06-21 10:55 by Daniel Hu
          這是我的整理,http://www.daniel-journey.com/archives/63 javascript異常處理使用總結
          主站蜘蛛池模板: 会同县| 涟水县| 三江| 黑龙江省| 澄江县| 定陶县| 肥西县| 涟源市| 陵水| 建湖县| 永顺县| 遂溪县| 酉阳| 皮山县| 三江| 通渭县| 绥德县| 乃东县| 临武县| 奈曼旗| 玉屏| 井冈山市| 康平县| 晋宁县| 临安市| 贺兰县| 江陵县| 柏乡县| 孝感市| 丹东市| 南阳市| 乐都县| 黑山县| 灌阳县| 吐鲁番市| 石家庄市| 启东市| 瓦房店市| 紫金县| 桐梓县| 普宁市|