「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。
简单了解Number()
与其他语言不同JS是不区分整数值和浮点值的。Number类型使用的是IEEE754格式表示整数和浮点值的。Number的整数范围大概在-2的53次幂到2的53次幂。
如果要确定一个值是否超过JS能表示的范围,可以使用isFinite()函数。
let result = Number.MAX_VALUE + Number.MAX_VALUE;
console.info(isFinite(result)); // false;
// ECMAScript 表示最小数值保存在 Number.MIN_VALUE,最大数值保存在 Number.MAX_VALUE
注:+0与-0是相等的
不同数值有不同数值字面量格式
-
十进制基本数值字面量:
let num = 23; -
十六进制,以0x开头,数值十六进制数字(0 ~ 9,a ~ f,A ~ F):
let num = 0x1f; // 31 -
八进制,以0开头,数值为相应八进制(0 ~ 7):
let num = 070; // 56,如果超出范围就会忽略前面的0转换为十进制数(八进制在严格模式下是无效的)
定义浮点值
浮点值必须包括小数点,小数点后面必须有数字,前面不是必须非要加上数字但是建议加上。
当小数点后面没有值或者是0的时候数值就会变成整数。这是因为存储浮点值占用的内存空间是存储整数值空间的两倍。
let num1 = 1.; // 1
let num2 = 10.0; // 10
-
很大的浮点数怎么办
其实也是可以和数学一样用科学计数法
let nums = 3.14e6;相当于3140000 -
那很小的数也是一样的哦
let nums = 2e-7;相当于 0.0000002
浮点值的精确度高达小数点后面17位,这也就出现了经典的精度丢失问题 0.1 + 0.2 !== 0.3;
js在做数字计算时,底层都是转二进制来计算的,0.1与0.2转二进制都是无线循环小数,js采用二进制浮点运算,小数点后只保留53位小数,导致精度丢失。
如何解决精度丢失的问题:
1、将小数扩大成整数做完加法后再变回去(有可能超过js的最大数)。
2、利用第三方库,比如Math.js、big.js等;
一个特殊的数值NaN
意思为Not a Number 不是一个数值
- 那些会产生NaN的计算
console.info(0/0); // NaN
console.info(-0/+0); // NaN
console.info(Number(undefined)); //NaN
console.info(Number('jxx')); //NaN
任何涉及NaN的操作都会返回NaN(如NaN/2),但是判断是否相等除外
console.info(NaN == NaN); // false
正因为如此ES为我们提供了isNaN()函数来判断是不是NaN
console.info(isNaN(NaN)); // true
console.info(isNaN(100)); // false 100 是数值
console.info(isNaN("100")); // false 可以转换为数值100
console.info(isNaN("blue")); // true 不可以转换为数值
console.info(isNaN(true)); // false 可以转换为数值1
注: isNaN()也是可以用于测试对象的。是ES内置函数和操作符的工作方式首先调用对象的valueOf()方法,确定返回值是否可以转为数值,如果不能则调用toString()方法测试它的返回值。
剩下就是简单的数值转换,也是我们都众所周知的
let num1 = Number('hh'); // NaN
let num2 = Number(''); // 0
let num3 = Number(0); // 0
let num4 = Number('0009'); // 9
let num5 = Number(true); // 1 false为0
let num6 = Number('0xf'); // 15