문제

NULL에 의존하는 대신에 JavaScript에서 오류를보고하는 것이 좋습니다. 오류가 발생할 때 정의되지 않고 함수가 앞으로 진행할 수 없습니다. 나는 세 가지 접근법을 생각할 수 있습니다 :

  1. 아무것도하지 않습니다
  2. 예외를 던지십시오
  3. Assert
  4. 여기에 전달 된 양이있는 사용자 계정을 크레딧 한 함수입니다. credit 함수는 Account 객체의 일부입니다.

    여기에 순진한 해결책이 있습니다.

    function credit(amount) {
       this.balance += amount;
    }
    
    .

    이 접근법의 주요 문제는 유효하지 않은 데이터입니다. 수정하고 반환 값을 사용하여 작업이 실패했음을 나타냅니다.

    function credit(amount) {
        if(!isInt(amount)) {
            return false;
        }
        this.balance += amount;
    }
    
    .

    이것은 이전 하나의 개선이지만 클라이언트 코드는 작업이 성공했는지 확인하기 위해 리턴 값을 확인해야합니다. 기본적으로 시스템의 모든 메소드가 번거로울 수 있습니다.

    if(!johnDoe.credit(100)) {
        // do some error handling here
    }
    
    .

    두 번째와 비슷한 세 번째 접근법은 예외를 던지는 것입니다. 우리가 예외를 던지고 있기 때문에 일반적인 것보다는 특정 유형의 예외를 던질 수 있습니다.

    function credit(amount) {
        if(!isInt(amount)) {
            throw new InvalidAmountError(amount);
        }
        this.balance += amount;
    }
    
    .

    던지기 예외와 유사한 네 번째 접근법은 코드의 어설 션을 사용하는 것입니다. 위의 접근법과 비교 된 한 가지 단점은 주장이 일반적이기 때문에 사용자 정의 예외를 던질 수있는 기능을 잃게됩니다. 객체를 전달하여 각 어설 션 호출에 던져줌으로써 가능합니다.

    function credit(amount) {
        assert(!isInt(amount), "Amount to credit is not an integer");
        this.balance += amount;
    }
    
    .

    전역 assert 기능은 쓸수록 쉽게 코드를 조금 더 짧게 만듭니다.

    function assert(value, message) {
        if(value !== true) {
            throw new AssertionError(message);
        }
    }
    
    function AssertionError(message) {
        this.message = message;
    }
    
    AssertionError.prototype.toString = function() {
        return 'AssertionError: ' + this.message;
    }
    
    .

    이러한 접근 방식에서는 예기치 않은 값과 불행한 경로를 다루는 좋은 방법이 될 것입니다. 여기에 언급되지 않은 다른 접근 방식이 유용 할 수 있습니까?

도움이 되었습니까?

해결책

log4js 와 같은 오류를보고하도록 클라이언트 측 로깅 프레임 워크를 고려하십시오.하나는 응용 프로그램에 따라 Ajax를 통해 서버에 메시지 (즉, 정보, 디버그, 경고, 오류)를 로그인하거나 서버에 지속시킬 수 있습니다.

log4js 사이트는 다른 JavaScript 로깅 프레임 워크의 목록을 제공합니다.

사용자 정의 예외 예제를 사용하여 좋은 접근 방식은 예외를 던지고 적합 할 때 오류를 기록하는 것입니다.

다른 팁

위에 비교 한 한 가지 단점 접근법은 주장이 이래로 일반적인, 우리는 던질 수있는 능력을 잃는다 사용자 정의 예외

반드시 :

function assert(value,message,Exctype) {
    if(value !== true) throw new Exctype(message);
}
.

생성자는 기능입니다.함수는 첫 번째 클래스 값입니다.주위에 자유롭게 지나가십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top