UPD (từ bình luận của tôi): Chắc chắn không phải là một thực hành tốt để chọn một số con số kỳ diệu để chỉ ra giá trị vắng mặt, trừ khi bạn có thể hoàn toàn chắc chắn con số kỳ diệu này sẽ không xuất hiện như là kết quả của một số arithmetics (nói chung là đúng). Vì vậy, cách tiếp cận tốt nhất ở đây là sử dụng loại rộng hơn int
(ví dụ: Number
) hoặc chuyển một số cờ (Boolean
giá trị) để hoạt động, cũng như int
, để cho biết sự vắng mặt giá trị thực tế. Sự lựa chọn nên phụ thuộc vào việc bạn muốn nhấn mạnh tầm quan trọng của thực tế là giá trị truyền là không thể thiếu.
Nếu bạn cảm thấy thoải mái với việc mở rộng loại đối số, sau đó bạn nên sử dụng NaN
và làm điều này:
function setMyValue (myVar : Number = NaN) : void
{
if (isNaN(myVar))
{
/* Generate a value for myVar */
}
else
{
/* Use the supplied value for myVar */
}
}
Đó là chính xác về mặt kỹ thuật cả hơn và nó cũng ổn định hơn. Nó cũng sẽ cho phép bạn mạnh mẽ gõ vào thời gian biên dịch và sẽ không gây ra lỗi lạ như trong trường hợp sử dụng Object
.
Lưu ý rằng thao tác này sẽ không hoạt động với int
là một trong các câu trả lời được đề xuất. int
chỉ có chỉ giá trị bằng số và NaN
sẽ bị ép buộc thành 0. Bạn sẽ cần sử dụng loại Number
.
Nếu bạn lo lắng về hiệu suất - đừng. Sử dụng Number
thay vì int
hoặc uint
nói chung là OK.
UPD: Nếu bạn muốn một cách rõ ràng đánh dấu luận rằng nên không thể thiếu chỉ cần sử dụng cờ bổ sung và loại chính xác - nó sẽ được rõ ràng hơn nhiều.
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 */
}
}
lựa chọn khác là để xác định kiểu của riêng bạn với giá trị bổ sung, ví dụ MaybeInt
, giữ giá trị số nguyên và cờ (cho dù nó có thực sự được khởi tạo hay không). Bằng cách đó, bạn sẽ báo hiệu rõ ràng rằng giá trị phải là không thể tách rời hoặc không có giá trị. Tuy nhiên, cách tiếp cận này có thể hơi cồng kềnh.
Ah, OK, Số là hơi khác nhau. Số mặc định là NaN, do đó, cá thể đó có thể được xử lý bằng isNaN (myVar). Tuy nhiên, vẫn muốn giải quyết cho int và uint. – Wikiup