在javascript中,當(dāng)數(shù)字類型的變量和其他類型運算,或運算的值不是數(shù)字時,會得到一個名為NaN(Not a Number)的結(jié)果。NaN的特殊之處在于,它不等于任何一個其他的值,即使和自己比較也會返回false。
例如,我們可以嘗試用NaN去操作一個數(shù)字類型變量:
var num1 = 10; var result = num1 / "hello"; console.log(result); // 返回 NaN
這里我們將字符串“hello”和數(shù)字10進行除法運算,得到的結(jié)果是NaN。這是因為字符串和數(shù)字之間不能進行除法運算。同樣地,如果我們將一個數(shù)字和undefined、null等其他類型的變量進行運算,結(jié)果也會是NaN。
有時候我們也會在一個表達式中出現(xiàn)NaN,這時整個表達式的結(jié)果也會被認為是NaN:
var result = 10 / 0 + "hello" * 5 - "world"; console.log(result); // 返回 NaN
這里我們將數(shù)字10除以0得到無窮大,然后用無窮大加上字符串“hello”乘以5得到NaN,接著用NaN減去字符串“world”,結(jié)果仍然是NaN。
在一些情況下,我們可能想要判斷一個值是否是NaN。由于NaN和任何值都不相等,所以我們可以使用一個內(nèi)置函數(shù)isNaN()來進行判斷:
var num1 = 10; var num2 = "hello"; var result1 = isNaN(num1); var result2 = isNaN(num2); console.log(result1); // 返回 false console.log(result2); // 返回 true
這里我們對數(shù)字類型的變量num1和字符串類型的變量num2分別使用isNaN(),結(jié)果num1返回false,num2返回true。因為num1是數(shù)字類型,而num2是字符串類型,無法被轉(zhuǎn)換成數(shù)字,所以它是NaN。
了解NaN的運算規(guī)則對于我們編寫javascript代碼非常重要。我們需要先判斷數(shù)字類型變量的有效性,避免出現(xiàn)NaN的錯誤結(jié)果。當(dāng)然,在一些特殊的場景下,NaN也可以用來表示無效值,比如在存儲數(shù)據(jù)時,我們可以用NaN來標(biāo)記缺失的數(shù)值。