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)
매우 다른, 마찬가지로위한 것입니다 Number
및 Boolean
.)
즉, 오류가 발생하더라도 Error
객체 를 던질 필요조차 없습니다 … throw 'Bad things happened';
작동
할 것입니다 디버깅을 위해 객체 리터럴을 던질 수도 있습니다.
throw {message:"You've been a naughty boy",
context: this,
args: arguments,
more:'More custom info here'};