数字
前置知识:
在JavaScript中,数字为双精度浮点类型(即一个数字范围只能在-(253-1)和(253-1)之间),整数类型也一样。 另外数字类型也可以是以下三种符号值:
-
+Infinity: 正无穷; -
-Infinity: 负无穷; -
NaN: 非数字(not a number);
1.数字对象
JS中内置了Number对象的一些常量属性:
| 属性 | 描述 |
|---|---|
Number.MAX_VALUE |
可表示的最大值 |
Number.MIN_VALUE |
可表示的最小值 |
Number.NaN |
特指“非数字” |
Number.NEGATIVE_INFINITY |
特指“负无穷”;在溢出时返回 |
Number.POSITIVE_INFINITY |
特指“正无穷”;在溢出时返回 |
Number.EPSILON |
表示1和比最接近1且大于1的最小Number之间的差别 |
Number.MIN_SAFE_INTEGER |
JavaScript最小安全整数. |
Number.MAX_SAFE_INTEGER |
JavaScript最大安全整数. |
注意:以上所有属性都是不可写,不可枚举,也不可配置。
Number.MAX_VALUE
Number.MAX_VALUE是 Number 对象的一个静态属性,值接近于 1.79E+308。大于 Number.MAX_VALUE的值代表 "Infinity"。
let a = 100;
if(a < Number.MAX_VALUE){
console.log('success');
}
// success
Number.MIN_VALUE
Number.MIN_VALUE是 Number 对象的一个静态属性,值接近于 5e-324,是 JavaScript 里最接近 0 的正值,而不是最小的负值。
let a = 100;
if(a > Number.MIN_VALUE){
console.log('success');
}
// success
Number.NaN
Number.NaN 表示“非数字”,和 NaN 一样。
Number.POSITIVE_INFINITY
Number.POSITIVE_INFINITY 属性表示正无穷大,值同全局对象 Infinity 属性的值相同。
let a = Number.MAX_VALUE * 2;
if(a == Number.POSITIVE_INFINITY){
console.log('success');
}
// success
Number.NEGATIVE_INFINITY
Number.NEGATIVE_INFINITY 属性表示负无穷大,值和全局对象的 Infinity 属性的负值相同。
let a = - Number.MAX_VALUE * 2;
if(a == Number.NEGATIVE_INFINITY){
console.log('success');
}
// success
Number.EPSILON
Number.EPSILON属性表示 1 与Number可表示的大于 1 的最小的浮点数之间的差值,值接近于 2-52 。
let a = 0.1, b = 0.2, c = 0.3;
let d = (Math.abs(a + b - c) < Number.EPSILON);
d; // true
Number.MIN_SAFE_INTEGER
JS中最小的安全的integer型数字 (-(253 - 1))。
Number.MAX_SAFE_INTEGER
JS中最大的安全的integer型数字 (253 - 1)。
2.数字方法
常见的方法有:
| 方法 | 描述 |
|---|---|
Number.parseFloat() |
把字符串参数解析成浮点数,和全局方法 parseFloat() 作用一致. |
Number.parseInt() |
把字符串解析成特定基数对应的整型数字,和全局方法 parseInt()作用一致. |
Number.isFinite() |
判断传递的值是否为有限数字。 |
Number.isInteger() |
判断传递的值是否为整数。 |
Number.isNaN() |
判断传递的值是否为 NaN. |
Number.isSafeInteger() |
判断传递的值是否为安全整数。 |
使用方法:
- Number.parseFloat()
let a1 = 3.1415, a2 = '3.1114';
Number.parseFloat(a1); // 3.1415;
Number.parseFloat(a2); // 3.1111;
parseFloat(a1); // 3.1415;
parseFloat(a2); // 3.1111;
Number.parseFloat == parseFloat;// true
- Number.parseInt()
let a1 = '0110';
Number.parseInt(a1, 2); // 6
Number.parseInt(a1, 10); // 110
Number.parseInt = parseInt; // true
- Number.isFinite()
Number.isFinite(Infinity); // false
Number.isFinite(NaN); // false
Number.isFinite(-Infinity); // false
Number.isFinite(0); // true
Number.isFinite(2e64); // true
Number.isFinite('0'); // false, 全局函数 isFinite('0') 会返回 true
- Number.isInteger()
Number.isInteger(0); // true
Number.isInteger(1); // true
Number.isInteger(-100000); // true
Number.isInteger(0.1); // false
Number.isInteger(Math.PI); // false
Number.isInteger(Infinity); // false
Number.isInteger(-Infinity); // false
Number.isInteger("10"); // false
Number.isInteger(true); // false
Number.isInteger(false); // false
Number.isInteger([1]); // false
- Number.isNaN()
Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0) // true
// 下面这几个如果使用全局的 isNaN() 时,会返回 true。
Number.isNaN("NaN"); // false,字符串 "NaN" 不会被隐式转换成数字 NaN。
Number.isNaN(undefined); // false
Number.isNaN({}); // false
Number.isNaN("blabla"); // false
// 下面的都返回 false
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN(37);
Number.isNaN("37");
Number.isNaN("37.37");
Number.isNaN("");
Number.isNaN(" ");
- Number.isSafeInteger()
Number.isSafeInteger(3); // true
Number.isSafeInteger(Math.pow(2, 53)) // false
Number.isSafeInteger(Math.pow(2, 53) - 1) // true
Number.isSafeInteger(NaN); // false
Number.isSafeInteger(Infinity); // false
Number.isSafeInteger("3"); // false
Number.isSafeInteger(3.1); // false
Number.isSafeInteger(3.0); // true
数字类型原型上的方法:
| 方法 | 描述 | 案例 |
|---|---|---|
toExponential() |
返回一个数字的指数形式的字符串 | 1.23e+2 |
toFixed() |
返回指定小数位数的表示形式 | var a=123,b=a.toFixed(2)//b="123.00" |
toPrecision() |
返回一个指定精度的数字。 | a=123中,3会由于精度限制消失var a=123,b=a.toPrecision(2)//b="1.2e+2" |
toExponential()
以指数表示法返回该数值字符串表示形式,可接收一个参数指定小数点后几位数字。
let a = 99.6633;
let a1 = '字符串:' + a.toExponential(); // "字符串:9.96633e+1"
let a2 = '字符串:' + a.toExponential(2);// "字符串:9.97e+1"
toFixed()
使用定点表示法来格式化一个数,可接收一个参数指定保留小数点后几位,取值为0-20之间。 注意: 返回的数据类型是字符串类型。
let a = 1.2345;
a.toFixed(); // "1"
a.toFixed(2); // "1.23"
toPrecision()
以指定的精度返回该数值对象的字符串表示,可接收一个参数,用来指定有效数个数的整数。
let a = 1.2345;
let a1 = '字符串:' + a.toPrecision(); // "字符串:1.2345"
let a2 = '字符串:' + a.toPrecision(1);// "字符串:1"
let a2 = '字符串:' + a.toPrecision(2);// "字符串:1.2"
3. Math 数学对象
JS内置的数学对象 Math,有很多属性和方法,这里需要注意的是 Math对象中的三角函数参数都是弧度制的。
| 方法 | 描述 |
|---|---|
| 常用 | ------ |
| math | 数学 |
| PI | 圆周率 |
| max | 最大 |
| min | 最小 |
| floor | 地板(去掉小数) |
| ceil | 天花板(逢小数进1) |
| round | 四舍五入 |
| random | 产生随机 |
| abs | absolute 绝对值 |
| 扩展 | ------ |
abs() |
绝对值 |
sin(), cos(), tan()
|
标准三角函数;参数为弧度 |
pow(), exp(), expm1(), log10(), log1p(), log2()
|
指数与对数函数 |
floor(), ceil()
|
返回最大/最小整数小于/大于或等于参数 |
min(), max()
|
返回一个以逗号间隔的数字参数列表中的较小或较大值(分别地) |
random() |
返回0和1之间的随机数。 |
round(), fround(), trunc()
|
四舍五入和截断函数 |
sqrt(), cbrt(), hypot()
|
平方根,立方根,平方参数的和的平方根 |
sign() |
数字的符号, 说明数字是否为正、负、零。 |
1. Math.PI
js里自带一些对象,供我们开发者使用,这些对象提前内置准备好了一些常用的属性和方法,我们直接拿来用就可以了。
比如:圆周率 3.1415926 Math.PI
Math内置对象 不是一个构造函数 所以直接使用不需要new
Math.PI 直接使用,不需要创建
console.log(Math.PI)//3.1415926
2. Math.max()
3. Math.min()
返回一组数字中的最大/小值,如果给定的参数中至少有一个参数无法转换为数字则返回NaN。
console.log(Math.max(10,22,5));//22
console.log(Math.max(10,'a',5));//NaN
console.log(Math.min(10,22,5));//5
console.log(Math.min(10,'a,5));//NaN
4. Math.floor ()
Math.floor 向下取整
console.log(Math.floor(1.1));//1
console.log(Math.floor(1.5));//1
console.log(Math.floor(1.9));//1
console.log(Math.floor(-1.1));//-2
console.log(Math.floor(-1.5));//-2
console.log(Math.floor(-1.9));//-22
5. Math.ceil()
Math.ceil向上取整
console.log(Math.ceil(1.1));//2
console.log(Math.ceil(1.5));//2
console.log(Math.ceil(1.9));//2
console.log(Math.ceil(-1.1));//-1
console.log(Math.ceil(-1.5));//-1
console.log(Math.ceil(-1.9));//-1
6. Math.round ()
Math.round四舍五入 就近取整
console.log(Math.round(1.1));//1
console.log(Math.round(1.9));//2
console.log(Math.round(-1.1));//-1
console.log(Math.round(-1.9));//-2
//.5谁大取谁
console.log(Math.round(1.5));//2
console.log(Math.round(-1.5));//-1
7. Math.random ()
Math.random生成随机数(重点)
返回的是0~1之间的随机小数 [0,1)
这个随机函数括号之间不写参数
console.log(Math.random());
得到一个两个数之间的随机整数,包括两个数在内的方法:
function getRandom(min,max){
return Math.floor(Math.random()*(max-min+1))+min;
}
console.log(getRandom(0,5));
案例:随机生成背景颜色
<style>
body {
background-color: rgb(0, 255, 0);
}
</style>
<script>
function getRandom(min,max){
return Math.floor(Math.random()*(max-min+1))+min;
}
console.log(getRandom(0,5));
function getRandomColor(){
var c1=getRandom(0,255);
var c2=getRandom(0,255);
var c3=getRandom(0,255);
return 'rgb(' + c1 + ',' + c2 + ',' + c3 + ')'
}
console.log(getRandomColor());
// 下面的代码演示写的程序没有错误
window.onload = function() {
document.body.style.backgroundColor = getRandomColor();
}
</script>
8. Math.abs()
alert(Math.abs(-1)); //1
alert(Math.abs('1')); //1 隐式转换 讲字符型转换为数值型 再取绝对值
alert(Math.abs('abs')); //NaN 如果里面参数 有非数字型的 字符串 返回的结果是 NaN
完整的描述和使用方法,建议查看 MDN Math