哪些属于number类型
- 正数、零、负数、小数
- NaN:not a number不是一个有效数字,但是属于number类型的
- Infinity:无穷大的值,也是number类型的
NaN: NaN和任何值都不相等(包括自己本身)
console.log(1 == 1);//=> true
console.log(NaN == NaN);//=> false
使用isNaN验证n是不是有效数字,isNaN验证一个值是否为非有效数字,如果是有效数字,则返回false,如果不是有效数字,则返回true;在使用isNaN检测时,如果检测的值是非数字类型的值,则需要先把其转换为数字类型,然后在进行检测
- 把其它数据类型转换为数字类型
- Number([value]);而isNaN在检测的时候,使用的就是这种方式转换为数字类型的
- parseInt([value]);
- parseFloat([value]);
let n = NaN;
/*
//这个判断不成立,因为NaN和任何值都不相等包括自己本身
if(n == NaN){
console.log("n不是有效数字!");
}
*/
console.log(isNaN(1));//=> false,1是有效数字,返回true
console.log(isNaN(n));//=>true, n=>NaN 不是一个有效数字,返回true
console.log(isNaN(Infinity));//=>false,Infinity是有效数字,返回true
/*
如果检测的值是非数字类型的值,则需要先把其转换为数字类型,然后在进行检测
把其它数据类型转换为数字类型
+ Number([value]);而isNaN在检测的时候,使用的就是这种方式转换为数字类型的
+ parseInt([value]);
+ parseFloat([value]);
*/
console.log(isNaN("12"));//先把"12"转换为数字类型=>Number("12")=>12,isNaN(12)=>false
Number是JS内置的转换方法,可以把其它数据类型“强制”转换为数字类型
- 把字符串转换为数字:一旦字符串中出现非有效数字字符,则结果为NaN,只有都是有效数字字符,才能转换为具体的数字,空字符串会转化为0
- 把布尔转换为数字:true转换为数字为1、false转换为数字为0
- 把空转换为数字: null转换为数字为0、undefined转换为数字为NaN
- 不能把Symbol类型转换为数字,否则会报错
- 对象转换为数字: 先把对象转换为字符串,再把字符串转换为数字
- 普通对象;数组对象;其余兑现格式基本上都会变为数字
- 函数转换为数字:全部都是NaN
//把字符串转换为数字
console.log(Number('12'));//=> 12
console.log(Number('12.5'));//=> 12.5
console.log(Number('12px'));//=> NaN
console.log(Number('12.5.0'));//=> NaN
//把布尔转换为数字
console.log(Number(true));//=> 1
console.log(Number(false));//=> 0
//把空转换为数字
console.log(Number(null));//=> 0
console.log(Number(undefined));//=> NaN
//不能把Symbol类型转换为数字
console.log(Number(Symbol(1)));//=>Cannot convert a Symbol value to a number at Number
//对象转换为数字:普通对象
/*
1.先把obj转化为字符串 [object Object]
2.把字符串转换为数字Number("[object Object]");
*/
let obj = {
x:100
};
console.log(Number(obj));//=>NaN
//数组对象转为数字:
/*
1.先把arr转化为字符串 "10"
2.把字符串转换为数字Number("10");
1.先把arr1转化为字符串 "1,2,3,4"
2.把字符串转换为数字Number("1,2,3,4");
1.先把arr2转化为字符串 "2,3,4"
2.把字符串转换为数字Number("2,3,4");
1.先把arr3转化为字符串 "王,李"
2.把字符串转换为数字Number("王,李");
*/
let arr = [10];
let arr1 = [1,2,3,4];
let arr2 = ["2","3","4"];
let arr3 = ["王","李"];
console.log(Number(arr)); //=> 10
console.log(Number(arr1)); //=> NaN
console.log(Number(arr2)); //=> NaN
console.log(Number(arr3)); //=> NaN
console.log(Number([]));//=> [].toString()=>'';Number('');=>0
//函数转换为数字
function func(){}
console.log(Number(func));//=> NaN
练习
console.log(isNaN("AA"));//=> true
console.log(isNaN("12.5"));//=> false
console.log(isNaN("12.5px"));//=> true
console.log(isNaN([]));//=> false
console.log(isNaN([10]));//=> false
console.log(isNaN([10,15]));// true
console.log(isNaN({}));//=> true
console.log(isNaN(null)); //=> false
console.log(isNaN(undefined));//=> true
console.log(isNaN(Symbol(1)));//=> 报错
parseInt / parseFloat : 把其它数据类型转换为number类型
- 处理原理和Number不一样,它们是把字符串转化为数字类型(如果处理的值不是字符串,需要先转换为字符串然后再转换为number类型)
/*
从字符串最左边开始查找,把找到的有效数字字符转换为数字,一直遇到一个非有效数字为止,则结束查找
parseFloat比parseInt多识别一个小数点
*/
console.log(parseInt('12px'));//=>12
console.log(parseInt('12px2'));//=>12
console.log(parseInt('width:12px'));//=> NaN
console.log(parseInt('12.2'));//=>12
console.log(parseFloat('12.2'));//=>12.2
console.log(parseInt(true));//=>先把true转换为字符串“true” parseInt('true');=> NaN
console.log(parseInt(NaN));//=>先把NaN转换为字符串“NaN” parseInt('NaN');=> NaN
console.log(parseInt(null));//=>先把null转换为字符串“null” parseInt('null');=> NaN
console.log(parseInt("0.8"));//=>0
console.log(isNaN(Number(parseInt('0.8'))));//=> false parseInt('0.8');=>0 Number(0)=>0 isNaN(0);=>false
console.log(Number(''));//=> 0
console.log(parseInt(''));//=> NaN
==、数学运算、isNaN 的转换机制同Number转换机制是一样的
toFixed:保留小数点后面N位(最后的结果是一个字符串)
let n = 3.1415926;
console.log(n.toFixed(2));//=>'3.14'
JS能够有效识别的最大整数:Number.MAX_SAFE_INTEGER
- ES6中提供了一个新的数据类型BigInt:管理超过最安全数值的数字
console.log(Number.MAX_SAFE_INTEGER);//=>9007199254740991(最大安全数,JS能够有效识别的最大整数)
console.log(9007199254740991 == 9007199254740992);//=>false
console.log(9007199254740992 == 9007199254740993);//=> true,由于超过了JS最大整数值,JS无法精准计算
//ES6提供了一个新的数据类型BigInt:管理超过最安全数值的数字
console.log(BigInt(9007199254740992),BigInt(9007199254740993));//=> 9007199254740992n 9007199254740992n
基本数据类型
- number string boolean null undefined symbol => BigInt新增的基本数据类型
网友评论