본문으로 건너뛰기

JS 학습노트 8_ 오류 처리

무료2015-04-12#JS#js错误处理

본고에서는 js 의 오류 처리 구문, 오류 타입, error 이벤트, 및 6 가지 오류 회피 상식을 소개한다

##1.오류 처리 구문:(js 에는 예외 exception 이라는 개념이 없으며, 모두 오류 error 입니다)

try{
  //throw new Error(msg);
  //throw '错误';
  //throw false;
  //throw ...
  //throw 연산자의 피연산수에는 아무런 제한이 없으며, 마음대로 던질 수 있습니다
}
catch(err){
  //alert(err.message);//message 는 모든 브라우저에서 지원되는 유일한 속성입니다
}
finally{
  //
}

주의: [IE7-] 에는 버그가 있습니다: catch 블록이 없으면 finally 블록이 실행되지 않습니다. 따라서 완전한 try-catch-finally 를 사용하는 것을 권장합니다

高程에는 기술상의 오류가 있습니다 (중문판 501 페이지):

독자는 반드시 기억해 두십시오, 코드가 finally 절을 포함하는 한, try 또는 catch 문 블록 내의 return 문은 모두 무시됩니다.

本机 테스트 결과:finally 에 들어가기 전에 마주친 return 은 finally 완료 후에도 return 됩니다. 책에 쓰여 있는 "무시"라는 것이 아니라, 아마도 단순한 애매함일 것입니다.

또한, js 에는 java 의 예외 처리와 같은 비밀이 존재합니다. 예를 들어:

//코드来自 http://www.cnblogs.com/averey/p/4379646.html
function aaa(){
  var x = 1;

  try {
    return ++x;
  } catch (err) {

  } finally {
    ++x;
  }
  return x;
}

(function(){
  var y = aaa();
  alert(y);//2
})();

자세한 내용은 다음을 참조하십시오:

물론, 이러한 작은 비밀은 알고 있으면 되며, 깊이 파고들 필요는 없습니다

##2.7 가지 오류 타입

  • Error

  • EvalError

  • RangeError

  • ReferenceError

  • SyntaxError

  • TypeError

  • URIError

##3.error 이벤트

브라우저의 오류 보고를 피하는 마지막 방어선으로, 구문은 다음과 같습니다:

window.onerror = function(msg, url, line){
  return true;//오류 보고 안 함
}

주의: 위의 DOM0 급 방식 으로 이벤트 핸들러를 추가할 수 있습니다. DOM2 급 표준을 따르지 않기 때문입니다

주의: 高程中文第三版 506 페이지에 문제가 있습니다. 실제로는 true 를 반환하면 오류 보고하지 않으며, 책에 쓰여 있는 false 를 반환하는 것이 아닙니다. 테스트 코드는 다음과 같습니다:

window.onerror = function(e) {
  return true;//Chrome, FF, IE8 은 모두 오류 보고 안 함
  //return false;//Chrome, FF 는 오류 보고, IE8 은 오류 보고 안 함
}
'str'.startWith('x');///오류 트리거

##4.몇 가지 상식

  1. 형 변환과 형 변환 오류를 피하기 위해, 가능한 한===와!==를 사용하여 비교하십시오

  2. 제어문 내에서는 가능한 한 불리언 값을 사용하고, if(value) 와 같은 구조는 사용하지 마십시오. 자동으로 수행되는 형 변환으로 인해 여러 개의 거짓값이 존재하기 때문입니다:

    • false

    • +0/-0

    • undefined

    • null

    • ''/""(빈 문자열)

    • NaN

이러한 거짓값들은 예상치 못한 결과를 초래할 수 있습니다.===와!==만 사용하면 false 라는 거짓값만 있게 되어, 의미를 정확하게 표현할 수 있습니다

  1. if(value != null) 이나 if(value != undefined) 와 같은 검사는 사용하지 말고, 다음과 같이 해야 합니다:

    • 객체 값 검사에는 if(value instanceof Type) 을 사용

    • 기본 타입 값 검사에는 if(typeof value === strType) 을 사용

  2. body 내의 스크립트에서 document.body 관련 DOM 작업 (노드 추가/삭제) 을 수행하지 마십시오. IE 오류를 발생시킬 수 있기 때문입니다

  3. 외부 js 파일도 js 구문 오류를 일으킬 수 있으며, 오류 정보는 부정확하고 발견하기 어렵기 때문에, 외부 스크립트를 참조하기 전에 충분한 테스트를 수행해야 합니다

  4. IE 의 URI 길이 제한은 2048 자 이하이므로, get 으로 post 요청을 대체하여 성능을 최적화할 때, 쿼리 문자열의 길이를 가능한 한 짧게 해야 합니다 (예를 들어 짧은 필드 이름 사용 등)

댓글

아직 댓글이 없습니다

댓글 작성