The JavaScript built-in Isnan fungsi, adalah - seperti yang harus diharapkan secara default - sebuah "Dynamic Type Operator". Oleh karena itu semua nilai yang (selama proses DTC) dapat menghasilkan true | salah seperti"", " ", " 000"
, tidak bisa NaN.
Berarti argumen yang diberikan akan terlebih dahulu menjalani konversi seperti pada:
function isNaNDemo(arg){
var x = new Number(arg).valueOf();
return x != x;
}
Penjelasan:
Di baris atas badan fungsi, kami (pertama) berusaha untuk berhasil mengubah argumen menjadi objek angka. Dan (kedua), menggunakan operator titik kita - untuk kenyamanan kita sendiri - segera menanggalkan, yang primitif nilai dari objek yang dibuat.
Pada baris kedua, kita mengambil nilai yang diperoleh pada langkah sebelumnya, dan keuntungan dari kenyataan bahwa NaN tidak sama dengan apa pun di alam semesta, bahkan dengan dirinya sendiri, misalnya:NaN == NaN >> false
untuk akhirnya membandingkannya (untuk ketidaksetaraan) dengan dirinya sendiri .
Dengan cara ini fungsi kembali akan menghasilkan true hanya ketika, dan hanya jika, pengembalian argumen yang disediakan, adalah upaya gagal konversi ke objek nomor, yaitu, nomor bukan-angka; misalnya, NaN.
isNaNstatic ()
Namun, untuk Operator Tipe Statis - jika diperlukan dan saat dibutuhkan - kita dapat menulis fungsi yang jauh lebih sederhana seperti:
function isNaNstatic(x){
return x != x;
}
Dan hindari DTC sama sekali sehingga jika argumen tidak secara eksplisit nomor NaN, itu akan mengembalikan false. Karenanya, pengujian terhadap hal-hal berikut:
isNaNStatic(" x"); // will return false
karena masih string.
Namun:
isNaNStatic(1/"x"); // will of course return true.
seperti akan misalnya isNaNStatic(NaN); >> true
.
Tetapi bertentangan dengan isNaN
, isNaNStatic("NaN"); >> false
karena itu (argumen) adalah string biasa.
ps: Versi isNaN statis bisa sangat berguna dalam skenario pengkodean modern. Dan itu mungkin salah satu alasan utama saya meluangkan waktu untuk memposting ini.
Salam.