2012-11-08 2 views
82
var err1 = Error('message'); 
var err2 = new Error('message'); 

무엇이 다른가요? 크롬 콘솔에서 그들을보고, 그들은 동일하게 보입니다. 동일한 속성 및 동일한 __proto__ 체인. 거의 Error처럼 보이는 공장처럼 행동합니다.오류 ('msg') throws 새 오류 ('msg')

올바른 것은 무엇이며 그 이유는 무엇입니까?

+5

: Error 객체를 던져 ... throw 'Bad things happened'; 너무
심지어 디버깅을위한 객체 리터럴을 던질 수, 작동합니다 'new'없이 호출 될 때의 동작. –

+2

또한 [새 오류()가'Error()'보다 더 낫지 않습니까?] (http://stackoverflow.com/q/38759428/1048572) – Bergi

답변

82

둘 다 좋습니다. 이 명시 적으로 언급되어 the specification :

는 ... 따라서 함수 호출 Error(…)가 동일한 인수 오브젝트 생성 식 new Error(…) 동일하다. ArrayObject는 ... 오류의 경우 말했다 if (!(this instanceof Array)){ return new Array(arguments);}

같은 모든 체크 뭔가,이 경우에도 필요하지 않은 것 :

+0

ES6에서도 마찬가지입니까? – paulmelnikow

11

Error 사실 거의 모든 기본 생성자가 수행 공장처럼 행동 않습니다 각각 포함한 모든 기본 생성자가 인 ECMAScript에 정의되어

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

나는 완전히 동의하지 않을까 두렵다. 'String ("abc")'는'String' 객체를 생성하지 않지만'new String ("abc")는 생성합니다. – pimvdb

+1

@pimvdb : true, 그것을'Object' =>'Object ('foo')'로 변경했습니다. 문자열 객체를 반환합니다. 그것의 일에와 있습니다. 거의 모든 네이티브 생성자가 약간 잘못되었습니다 ...'Number ','Boolean','Date','String' 모두 ...'Array','Object','Error'는하지만'Event'와 모든 DOMxxxx-api 생성자는 에러를 던집니다. –

+0

'new Array (arguments)'는'Array (1, 2, 3)'가하는 일을 정확하게 수행하지 않는다고 생각하십시오. 하지만 아마도 나는 단지 질질 마시고있다. :) – pimvdb

관련 문제