number數(shù)字類型
包含:常規(guī)數(shù)字烘绽、NaN
NaN
not a number: 不是一個數(shù)夹界,但它屬于數(shù)字類型
NaN和任何值(包括自己)都不想等:NaN != NaN嘁捷,所以我們不能用相等的方式判斷是否為有效數(shù)字
isNaN
檢測一個值是否為非有效數(shù)字窖逗,如果不是有效數(shù)字返回true累奈,反之是有效數(shù)字返回false
console.log(isNaN('10')); // => false
/*
Number('10') => 10
isNaN(10) => false
*/
注意:在使用isNaN進行檢測的時候斥铺,首先會驗證檢測的值是否為數(shù)字類型彻桃,如果不是,先基于Number()這個方法晾蜘,把值轉(zhuǎn)換為數(shù)字類型邻眷,然后再檢測
把其他類型值轉(zhuǎn)換為數(shù)字類型
- Number([val])
// 把字符串轉(zhuǎn)換為數(shù)字,只要字符串中包含任意一個非有效數(shù)字字符(第一點除外)結(jié)果都是NaN剔交,空字符串會變?yōu)?
console.log(Number(`12.5`)); // => 12.5
console.log(Number(`12.5px`)); // => NaN
console.log(Number('')); // => 0
// 布爾類型轉(zhuǎn)換為數(shù)字
console.log(Number(true)); // => 1
console.log(Number(false)); // => 0
console.log(isNaN(false)); // false
console.log(isNaN(true)); // false
// null -> 0 undefined -> NaN
console.log(Number(null)); // => 0
console.log(Number(undefined)); // => NaN
// 把引用數(shù)據(jù)類型轉(zhuǎn)換為數(shù)字肆饶,是先把它基于toString方法轉(zhuǎn)換為字符串,然后在轉(zhuǎn)換為數(shù)字
console.log(Number({name: '10'})); // => NaN
console.log(Number({})); // => NaN
// {}/{xxx: 'xxx'}.toString() => "[object object]"
console.log(Number([])); // => 0
// [].toString() => ''
console.log(Number([12])); // => 12
// [12].toString() => '12'
console.log(Number([12, 23])); // NaN
// [12, 23].toString() => '12,23'
- parseInt/parseFloat([val], [進制]): 也是轉(zhuǎn)換為數(shù)字的方法岖常,對于字符串來說驯镊,它是從左到右一次查找有效數(shù)字字符,直到遇到非有效數(shù)字字符竭鞍,停止查找(不管后面是否還有數(shù)字板惑,都不再找了),把找到的當做數(shù)字返回
let str = '12.5px';
console.log(Number(str)); // => NaN
console.log(parseInt(str)); // => 12
console.log(parseFloat(str)); // => 12.5
console.log(parseFloat('width:12.5px')); // => NaN
- ==進行比較的時候偎快,可能要出現(xiàn)把其他類型值轉(zhuǎn)換為數(shù)字
console.log(‘10’ == 10); // true