非數(shù)值,一種特殊的數(shù)值
console.log(+0 === -0) // true
console.log(0 / 0) // NaN
console.log(1 / 0) // Infinity
console.log(-1 / 0) // -Infinity
console.log(1 == true); // true
NaN特點(diǎn)
任何涉及NaN的操作都會返回NaN;
NaN與任何值都不相等,包括自己。
console.log(NaN == NaN)
image.png
針對這兩個特點(diǎn),ECMAScript定義了isNaN()函數(shù)。這個函數(shù)可以接受一個參數(shù),幫我們確定這個參數(shù)是否“不是數(shù)值”,這個函數(shù)在接受一個參數(shù)值后,會嘗試把它轉(zhuǎn)換為數(shù)值,不能轉(zhuǎn)換為數(shù)值的值,在這個函數(shù)中會返回true。
console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false
console.log(isNaN("10")); // false
console.log(isNaN("red")); // true
console.log(isNaN(true)); //false(可以被轉(zhuǎn)換成數(shù)值1)
數(shù)值轉(zhuǎn)換(Number / parseInt / parseFloat)
Number可以用于任何數(shù)據(jù)類型,另外兩個專門用于轉(zhuǎn)換字符串
Number(true) === 1 // true
Number(null) === 0 // true
Number(undefined) // NaN
parseInt('123abl') // 123
Number('123abl') // NaN
console.log(parseInt('')) // NaN
console.log(Number('')) // 0
console.log(parseInt(22.3)) // 22
console.log(Number(22.3)) // 22.3
對于八進(jìn)制,ECMAScript3 和ECMAScript 5有爭議
parseInt(070) --> 56(ECMAScript3)
parseInt(070) --> 70(ECMAScript5)
parseInt有兩個參數(shù),第二個參數(shù)表示使用多少進(jìn)制
parseFloat只用于十進(jìn)制,如果是十六進(jìn)制,轉(zhuǎn)為0
toString
null和undefined沒有這個方法,默認(rèn)一個參數(shù),表示轉(zhuǎn)換為多少進(jìn)制的數(shù),如果不知道是不是null或undefined,使用String方法
加法
Infinity + (-Infinity) // NaN
5 - true // 4
NaN - 1 // NaN
5 - '' // 0 (空被轉(zhuǎn)換成0)
5 - null // 5 (null被轉(zhuǎn)換成0)
undefined == 0 // false
null == 0 // false
- 擴(kuò)展:
由于內(nèi)存的限制,,js的數(shù)值中正負(fù)無窮分別保存在Number.MAX_VALUE
和Number.MIN_VALUE
中
console.log(Number.MAX_VALUE)
正無窮