var err1 = Error('message');
var err2 = new Error('message');
차이점이 뭐야? 크롬 콘솔에서 그것들을 보면 동일하게 보입니다. 객체와 동일한 __proto__체인 에서 동일한 속성 . 거의 Error공장 처럼 행동하는 것 같습니다 .
어느 것이 정확하고 왜?
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'};
String("abc")만들지 않습니다. Stringnew String("abc")
Object=> Object('foo')반환 문자열 객체를 ... 그것의 일에 와서 거의 모든 기본 생성자 되는 비트 잘못 ... Number, Boolean, Date, String모두가하지 ... Array, Object및 Error수행 그러나 Event모든 DOMxxxx-api 생성자에 오류가 던져
new Array(arguments)정확히 무엇을 Array(1, 2, 3)하지 않는다고 생각 합니다. 그러나 아마 나는 단지 nitpicking입니다 :)
Error인스턴스 가 아닌 (또는 문자열 리터럴) 던지면 스택 추적이 느슨해집니다. 링크 된 기사 arguments.callee에서 엄선 된 선택 : 엄격 모드에서는 금지됨
new.