Number数据类型(回顾)
- 范围
- isNaN(value)
- Number.isNaN(value) 与 isNaN(value) 的区别
- 封装isNaN
- parseInt(value)
- parseInt(value, radix)
- toString(radix)
- Number.toString(radix)
- parseFloat(value)
- toFixed(digits)
- Number.MAX_SAFE_INTEGER
范围
1.正数,负数,0
2.NaN ==》not a number 不是一个有效数字,但属于number类型
3.Infinity ==》无穷大的值
链接
isNaN(value)
定义:用来验证一个是否为有效数字
注意:先进行隐式类型转换
,再进行比较
var a = isNaN(NaN);//true
var b = isNaN(undefined);//true ==> Number(undefined)为NaN
var c = isNaN(null);//false ==> Number(null) === 0
var d = isNaN('a');//true ==> Number('a')为NaN
var e = isNaN({});//true ==> Number({})为NaN
Number.isNaN(value) 与 isNaN(value) 的区别
Number.isNaN(value) 对于其他数据类型不进行隐私类型转换
,直接返回false
var a = Number.isNaN(NaN);//true
var b = Number.isNaN(undefined);//false
var c = Number.isNaN(null); //false
var d = Number.isNaN('a'); //false
var e = Number.isNaN({}); //false
封装 isNaN
const myIsNaN = (value) => String(Number(value)) === "NaN"?true:false;
Number(value)
定义:把其他数据类型’强制’转换为数字类型
注意:隐私类型转换
就是使用Number转换为数字类型
字符串转数字
- 字符串中
只要有非有效数字字符
,则为NaN
var a = Number('2a');//NaN
Number('')
=== 0
var a = Number('');//0
布尔值转数字
var a = Number(true);//1
var b = Number(false);//0
undefined,null转数字
Number(undefined) === NaN
Number(null) === 0
var a = Number(undefined);//NaN
var b = Number(null);//0
对象转数字
Number({});//NaN
// 第一步: {}.valueOf() 判断为对象
// 第二步: {}.valueOf().toString() === '[object Object]'
// 第三部: Number('[object Object]')为NaN
Number([]);//0
// 第一步: [].valueOf() 判断为对象
// 第二步: [].valueOf().toString() === ''
// 第三部: Number('') === ““
不能将 Symbol 转为数字
Number(ymbol.for('a'));//报错
//TypeError: Cannot convert a Symbol value to a number
parseInt(string)
定义:整型,从字符串最左边
开始,把找到的有效数字转化为数字
,直到遇到第一个非有效数字
var a = parseInt(1.1);//1
var b = parseInt('1a');//1
var c = parseInt(['1a']);//1
parseInt(string, radix)
定义:按进制返回一个整数基数(十进制)
radix:2-36
的整数,超出则返回NaN
注意:parseInt(value, 0
) 相当于 parsrInt(value)
var a = parseInt(101,2);//5
var b = parseInt(101,8);//65
var c = parseInt(101,1);//NaN
var d = parseInt(101,37);//NaN
二进制,八进制,十六进制的简易表达
parseInt(0b11, 0);//3 => 0b 二进制
parseInt(0o11, 0);//9 => 0o 八进制
parseInt(0x11, 0);//17 => 0x 十六进制
扩展:
let arr = [1, 2, 3, 4];
console.log(arr.map(parseInt))// [1,NaN,NaN,NaN]
console.log(parseInt(1,0,arr))//1
console.log(parseInt(2,1,arr))//NaN
console.log(parseInt(3,2,arr))//NaN
console.log(parseInt(4,3,arr))//NaN
Number.toString(radix)
定义:把基数(十进制)变为目标进制数
radix:2-36
的整数
var a = 4.toString(2);//'100'
var b = 36.toString(36);//'10'
parseFloat(string)
定义:浮点型
与 paseInt 的区别:多识别一位小数点
var a = parseFloat(1.123);//1.123
var b = parseFloat('1.123a');//1.123
var c = parseFloat(['1.123a']);//1.123
toFixed(digits)
定义:四舍五入
保留小数点后N位,返回字符串
注意:
1.digits为0时,返回 0
2.digits 的范围在 0-100的整数
const x = 1 / 3;
var a = x.toFixed(2);//0.33
var b = x.toFixed(0);//0
var c = (123123.3457).toFixed(3);//123123.346
Number.MAX_SAFE_INTEGER
定义:最大安全整数(js可识别的最大整数)
数值:9007199254740997