number数字类型
包含:常规数字、NaN
NaN
not a number: 不是一个数,但它属于数字类型
NaN和任何值(包括自己)都不想等:NaN != NaN,所以我们不能用相等的方式判断是否为有效数字
isNaN
检测一个值是否为非有效数字,如果不是有效数字返回true,反之是有效数字返回false
console.log(isNaN('10')); // => false
/*
Number('10') => 10
isNaN(10) => false
*/
注意:在使用isNaN进行检测的时候,首先会验证检测的值是否为数字类型,如果不是,先基于Number()这个方法,把值转换为数字类型,然后再检测
把其他类型值转换为数字类型
- Number([val])
// 把字符串转换为数字,只要字符串中包含任意一个非有效数字字符(第一点除外)结果都是NaN,空字符串会变为0
console.log(Number(`12.5`)); // => 12.5
console.log(Number(`12.5px`)); // => NaN
console.log(Number('')); // => 0
// 布尔类型转换为数字
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
// 把引用数据类型转换为数字,是先把它基于toString方法转换为字符串,然后在转换为数字
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], [进制]): 也是转换为数字的方法,对于字符串来说,它是从左到右一次查找有效数字字符,直到遇到非有效数字字符,停止查找(不管后面是否还有数字,都不再找了),把找到的当做数字返回
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
- ==进行比较的时候,可能要出现把其他类型值转换为数字
console.log(‘10’ == 10); // true