2017-09-19 20 views
1

나는 자바 스크립트에서 오류를 던지는 3 개 가지 방법을 본 적이?'throw'foo'`,`throw Error ('foo')`,`throw new Error ('foo')`의 차이점은 무엇입니까?</p> <pre><code>throw 'message'; throw Error('message'); throw new Error('message'); </code></pre> <p>그들 사이의 차이점은 무엇입니까 :

참고 : 비슷한 질문 (1, 2, 3 등)을 알고 있습니다. 세 가지 경우 모두를 다루지는 않습니다.

+0

귀하의 질문은 "*이 질문의 답변을 나와 함께 정리해주십시오. *"입니까? – RobG

+0

@RobG "나"를 제외하고는 내 자신의 질문에 답한 이후로 "나"를 의미합니다. – Indolering

답변

3

throw은 기능을 중지하고 exception을 생성합니다. 예외가있는 경우 throw 다음에 오는 것이 모두 전달됩니다. 이것을 구문 설탕이있는 함수로 생각하면 throw('message')을 작성하는 대신 throw 'message'이라고 작성하십시오. throw new Error('message')은 객체가 문자열 리터럴 대신 전달되는 것을 제외하고는 throw 'message'과 같습니다. throw Error('message')throw new Error('message') 사이

There is no difference : 개체가 new 생성자없이 새로운 객체의 생성을 허용하고 Error 자바 스크립트 코어의 많은 그들 중 하나가 발생합니다.

즉, 은 항상 throw new Error('message')을 사용해야합니다. Error 개체에는 스택 트레이스 및 문자열 리터럴을 사용할 때 손실되는 유용한 디버깅 정보가 포함되어 있습니다. ES6 클래스를 사용하여 객체를 만들려면 스택 트레이스를 보존하는 유일한 방법은 newextending Error via a class입니다. 사용자 정의 오류 클래스를 작성하면 오류 처리가 훨씬 더 균일 해집니다.

참조 : extremely elaborate illustration.