UPD (aus meinem Kommentar): Es ist sicherlich keine gute Praxis einige magische Zahl zu holen Wert Abwesenheit anzuzeigen, wenn Sie diese magische Zahl völlig sicher sein kann, nicht als Folge von einigen erscheinen würde Arithmetik (was im Allgemeinen wahr ist). Daher ist der beste Ansatz hier, entweder einen breiteren Typ als int
(z. B. Number
) zu verwenden oder ein Flag (Boolean
-Wert) zu übergeben, um zu funktionieren, sowie int
, um den tatsächlichen Wertabwesend anzuzeigen. Wahl sollte davon abhängen, ob Sie die Wichtigkeit der Tatsache betonen möchten, dass der übergebene Wert integral ist.
Wenn Sie mit Erweiterung Argument Typ wohl fühlen, dann sollten Sie NaN
verwenden und dies tun:
function setMyValue (myVar : Number = NaN) : void
{
if (isNaN(myVar))
{
/* Generate a value for myVar */
}
else
{
/* Use the supplied value for myVar */
}
}
, dass beide mehr ist technisch korrekt, und es ist auch stabiler. Es erlaubt Ihnen auch, bei der Kompilierung stark zu tippen und würde keine merkwürdigen Fehler verursachen, wie im Fall der Verwendung von Object
.
Beachten Sie, dass dies mit int
nicht funktioniert, wie eine der Antworten suggeriert. int
hat nur numerische Werte, und NaN
wird auf 0 gezwungen. Sie müssen Number
Typ verwenden.
Wenn Sie über Leistung besorgt sind - nicht sein. Die Verwendung von Number
anstelle von int
oder uint
ist im Allgemeinen in Ordnung.
UPD: Wenn Sie möchten, zu markieren ausdrücklich, dass Argument nur zusätzliches Flag und dem genauen Typ verwenden integriert sein sollte - es ist viel klarer sein würde.
function setMyValue (isIntValueSupplied : Boolean = false, intValue : int = 0) : void
{
if (isIntValueSupplied)
{
/* Generate or use a default value of intValue */
}
else
{
/* Use the supplied value for intValue */
}
}
Eine weitere Option ist Ihre eigene Art mit zusätzlichem Wert zu definieren, z.B. MaybeInt
, die einen ganzzahligen Wert und ein Flag enthält (ob es tatsächlich initialisiert wurde oder nicht). Auf diese Weise würden Sie deutlich signalisieren, dass der Wert integral oder kein Wert sein sollte. Dieser Ansatz kann jedoch etwas sperrig sein.
Ah verwenden, OK, Zahl ist etwas anders. Number ist standardmäßig NaN, sodass diese Instanz mit isNaN (myVar) behandelt werden kann. Ich will immer noch nach int und uint auflösen. – Wikiup