UPD (от моего комментария): Это, конечно, не очень хорошая практика, чтобы выбрать какое-то магическое число, чтобы указать значение отсутствия, если вы не можете быть полностью уверены, что это магическое число не будет появляться в результате некоторых арифметика (что в целом верно). Поэтому лучше всего использовать более широкий тип, чем int
(например, Number
), или передать некоторый флаг (Boolean
) для функции, а также int
, чтобы указать отсутствие фактического значения. Выбор должен зависеть от того, хотите ли вы подчеркнуть важность факта, что прошедшее значение является целостным.
Если вы чувствуете себя комфортно с расширяющимися типом аргумента, то вы должны использовать NaN
и сделать это:
function setMyValue (myVar : Number = NaN) : void
{
if (isNaN(myVar))
{
/* Generate a value for myVar */
}
else
{
/* Use the supplied value for myVar */
}
}
То есть как технически более точным и она более устойчива. Он также позволит вам строго печатать во время компиляции и не будет вызывать странные ошибки, как в случае использования Object
.
Обратите внимание, что это не будет работать с int
, как предлагает один из ответов. int
имеет только числовые значения, а NaN
будет привязано к 0. Вам нужно будет использовать Number
.
Если вы беспокоитесь о производительности - не следует. Использование Number
вместо int
или uint
в целом нормально.
UPD: Если вы хотите явно отметить, что аргумент должен быть неотъемлемой частью просто использовать дополнительный флаг и точный тип - это было бы гораздо яснее.
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 */
}
}
Другой вариант определить собственный тип с дополнительным значением, например, MaybeInt
, который содержит целочисленное значение и флаг (независимо от того, был ли он фактически инициализирован или нет). Таким образом, вы четко указали бы, что значение должно быть целым или no-value. Однако этот подход может быть немного громоздким.
Ах, хорошо, номер немного отличается. Номер по умолчанию - NaN, так что экземпляр можно обрабатывать с помощью isNaN (myVar). Тем не менее, все же хочется решить для int и uint. – Wikiup