var err1 = Error('message');
var err2 = new Error('message');
Was ist der Unterschied? Wenn man sie in der Chromkonsole betrachtet, sehen sie identisch aus. Gleiche Eigenschaften für das Objekt und dieselbe __proto__
Kette. Scheint fast Error
wie eine Fabrik zu handeln.
Welches ist richtig und warum?
javascript
exception
Ilia Choly
quelle
quelle
new
.new Error()
besser alsError()
?Antworten:
Beide sind gut; Dies wird ausdrücklich in der Spezifikation angegeben :
quelle
Error
wirkt wie eine Fabrik, wie einige andere einheimische Bauer:Array
,Object
usw. Sie alle Kontroll so etwas wieif (!(this instanceof Array)) { return new Array(arguments); }
. (Aber beachte, dassString(x)
undnew String(x)
sehr unterschiedlich sind, und ebenso fürNumber
undBoolean
.)Das heißt, im Fehlerfall ist es nicht einmal erforderlich, ein
Error
Objekt zu werfen ...throw 'Bad things happened';
funktioniert auch.Sie können sogar ein Objektliteral zum Debuggen werfen:
quelle
String("abc")
erstellt keinString
Objekt, wohingegen dies dernew String("abc")
Fall ist.Object
=>Object('foo')
Gibt ein String - Objekt ... kommen , um etwas davon fast alle einheimischen Bauer ist ein bisschen falsch ...Number
,Boolean
,Date
,String
alle nicht ...Array
,Object
undError
tun, aberEvent
und alleDOMxxxx
-api Konstruktoren werfen Fehlernew Array(arguments)
macht nicht genau das, wasArray(1, 2, 3)
macht. Aber wahrscheinlich bin ich nur nitpicking :)Error
(oder String-Literalen) verliert die Stapelverfolgung. Nur eine Kleinigkeit zu dem verlinkten Artikel:arguments.callee
ist im strengen Modus verboten