2 Stimmen

Gibt es einen guten Grund für AS3 nicht eine Ausnahme zu werfen, wenn Sie versuchen, auf NaN zu arbeiten?

Wann ist eine Operation für eine NaN-Variable gültig? Ich würde sagen, niemals.

In AS3 wird jedoch keine Ausnahme ausgelöst, und es wird der Standardwert 0 zurückgegeben, wenn ein Vorgang mit einer solchen Variablen versucht wird.

Warum löst AS3 hier keine Ausnahme aus?

6voto

J. Holmes Punkte 18146

In AS3 wird keine Ausnahme ausgelöst, wenn man mit NaN denn AS3 ist ein Dialekt von ECMAScript , die wiederum Folgendes implementiert IEEE 754 die das Verhalten von NaN . Dieser Standard ist in einer Reihe von Sprachen und Architekturen implementiert, auch in solchen, die keine robuste Ausnahmebehandlung haben. NaN stellt eine Möglichkeit dar, diese Werte auszudrücken, ohne dass Ausnahmen erforderlich sind, und zwar auf eine Art und Weise, die über eine Reihe von Plattformen und Sprachen hinweg gut verstanden und gut dokumentiert ist.

Wenn es nicht gegen den Standard implementiert wurde, dann wäre ich bereit zu wetten, es gäbe hier Leute, die fragen: "Warum wirft AS3 eine Exception und nicht zurück NaN wie jede andere IEEE-754-Gleitkomma-Implementierung auch?!"

Siehe " Was jeder Informatiker über Fließkommaarithmetik wissen sollte... " für einen schnellen Überblick über Gleitkommamathematik und NaN im Allgemeinen, und überprüfen Sie die wikipedia über NaN und Sie werden sehen, dass es tatsächlich zwei Arten von NaN gibt, die von der Norm definiert werden. Ein ruhiges NaN und ein signalisierendes NaN.

Wann ist eine Operation für eine NaN-Variable gültig? Ich würde sagen, niemals.

Nichts für ungut, aber ich glaube nicht, dass Sie in der besten Position sind, um diese absolute Aussage zu treffen, denn ehrlich gesagt, haben viele Leute, die in ihrem Beruf viel klüger sind als Sie, darüber nachgedacht und sind nicht zu demselben Schluss gekommen.

2voto

laurent Punkte 83238

Höchstwahrscheinlich geschieht dies zu Optimierungszwecken. Wenn Flash jeden Wert zur Laufzeit prüfen müsste, wäre jede mathematische Operation sehr langsam. Wenn die Möglichkeit besteht, dass ein Wert NaN sein könnte, müssen Sie ihn einfach selbst überprüfen, indem Sie isNaN .

0voto

Jevgenij Dmitrijev Punkte 2218

Dies ist kein Fehler.

Le site int y uint im Flash ist standardmäßig 0.

Probieren Sie alle diese Varianten aus:

var scale:Number;
var resultINT:int = undefined; // still 0 in the output;
var resultNUMBER:Number; // is NaN;
var resultUINT:uint;// sezo by default

trace ( this, scale, resultINT, resultNUMBER, resultUINT );

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X