[javascript] 오류 발생 ( ‘msg’) vs 새 오류 발생 ( ‘msg’)

var err1 = Error('message');
var err2 = new Error('message');

차이점이 뭐야? 크롬 콘솔에서 그것들을 보면 동일하게 보입니다. 객체와 동일한 __proto__체인 에서 동일한 속성 . 거의 Error공장 처럼 행동하는 것 같습니다 .

어느 것이 정확하고 왜?



답변

둘 다 괜찮습니다. 이것은 사양에 명시 적으로 언급되어 있습니다 .

… 따라서 함수 호출 Error(…)new Error(…)동일한 인수를 가진 객체 생성 표현식 과 동일합니다.


답변

Error다른 기본 생성자처럼 공장처럼 행동 않습니다 Array, Object등 같은 모든 체크 뭔가를 if (!(this instanceof Array)) { return new Array(arguments); }. (그러나 참고 String(x)new String(x)매우 다른, 마찬가지로위한 것입니다 NumberBoolean.)

즉, 오류가 발생하더라도 Error객체 를 던질 필요조차 없습니다 … throw 'Bad things happened';작동
할 것입니다 디버깅을 위해 객체 리터럴을 던질 수도 있습니다.

throw {message:"You've been a naughty boy",
       context: this,
       args: arguments,
       more:'More custom info here'};


답변