2021-07-29 11:08:52 +08:00
|
|
|
|
---
|
2021-11-16 17:25:05 +08:00
|
|
|
|
title: 16-内置对象:Number和Math
|
2021-07-29 11:08:52 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
<ArticleTopAd></ArticleTopAd>
|
|
|
|
|
|
|
|
|
|
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
|
|
|
|
|
2020-06-12 15:51:38 +08:00
|
|
|
|
## 内置对象 Number 的常见方法
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
|
|
|
|
|
2020-06-12 15:51:38 +08:00
|
|
|
|
### Number.isInteger() 判断是否为整数
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
2020-06-12 15:51:38 +08:00
|
|
|
|
语法:
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
2020-06-12 15:51:38 +08:00
|
|
|
|
```
|
|
|
|
|
布尔值 = Number.isInteger(数字);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### toFixed() 小数点后面保留多少位
|
|
|
|
|
|
|
|
|
|
语法:
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
字符串 = myNum.toFixed(num);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
解释:将数字 myNum 的小数点后面保留 num 位小数(四舍五入),并返回。不会改变原数字。注意,**返回结果是字符串**。
|
|
|
|
|
|
|
|
|
|
参数 num:指定了小数点后面的位数。
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
2020-06-12 15:51:38 +08:00
|
|
|
|
举例:
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
let num = 3.456;
|
|
|
|
|
let num2 = num.toFixed(2);
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
2020-06-12 15:51:38 +08:00
|
|
|
|
console.log(num); // 打印结果:3.456
|
2021-03-21 15:42:46 +08:00
|
|
|
|
console.log(num2); // 打印结果:3.46
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
2020-06-12 15:51:38 +08:00
|
|
|
|
console.log(typeof num); // number
|
|
|
|
|
console.log(typeof num2); // string
|
|
|
|
|
```
|
|
|
|
|
|
2021-03-21 15:42:46 +08:00
|
|
|
|
上方代码中,`num2`的结果是3.46,但是请注意,`num`的类型Number型,而`num2`的类型却是String型。
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
2024-07-19 14:20:27 +08:00
|
|
|
|
另外需要注意的是,数字常量不能直接调 toFixed 方法。比如 `1.toFixed(2)`在 JS 中会引发语法错误。因为点号(.)被解释为数字字面量的一部分,而不是方法调用的分隔符。为了正确调用 toFixed 方法,可以使用括号或额外的点号。
|
|
|
|
|
|
|
|
|
|
toFixed()在这一点上,跟前面讲的 toString() 是类似的,推荐的做法是先把数字放到变量中存起来,然后通过变量调用 toFixed()。
|
|
|
|
|
|
|
|
|
|
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
|
|
|
|
## 内置对象 Math 的常见方法
|
|
|
|
|
|
|
|
|
|
Math 和其他的对象不同,它不是一个构造函数,不需要创建对象。所以我们不需要 通过 new 来调用,而是直接使用里面的属性和方法即可。
|
|
|
|
|
|
|
|
|
|
Math属于一个工具类,里面封装了数学运算相关的属性和方法。如下:
|
|
|
|
|
|
|
|
|
|
| 方法 | 描述 | 备注 |
|
|
|
|
|
|:-------------|:-------------|:-------------|
|
|
|
|
|
| Math.PI | 圆周率 | Math对象的属性 |
|
|
|
|
|
| Math.abs() | **返回绝对值** | |
|
2020-06-12 15:51:38 +08:00
|
|
|
|
| Math.random() | 生成0-1之间的**随机浮点数** | 取值范围是 [0,1) |
|
2020-02-17 21:43:20 +08:00
|
|
|
|
| Math.floor() | **向下取整**(往小取值) | |
|
|
|
|
|
| Math.ceil() | **向上取整**(往大取值) | |
|
|
|
|
|
| Math.round() | 四舍五入取整(正数四舍五入,负数五舍六入) | |
|
|
|
|
|
| Math.max(x, y, z) | 返回多个数中的最大值 | |
|
|
|
|
|
| Math.min(x, y, z) | 返回多个数中的最小值 | |
|
2020-06-12 15:51:38 +08:00
|
|
|
|
| Math.pow(x,y) | 乘方:返回 x 的 y 次幂 | |
|
|
|
|
|
| Math.sqrt() | 开方:对一个数进行开方运算 | |
|
|
|
|
|
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**举例**:
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
var num = -0.6;
|
|
|
|
|
|
|
|
|
|
console.log(Math.abs(num)); //取绝对值
|
|
|
|
|
|
|
|
|
|
console.log(Math.floor(num)); //向下取整,向小取
|
|
|
|
|
|
|
|
|
|
console.log(Math.ceil(num)); //向上取整,向大取
|
|
|
|
|
|
|
|
|
|
console.log(Math.round(num)); //四舍五入取整(正数四舍五入,负数五舍六入)
|
|
|
|
|
|
|
|
|
|
console.log(Math.random()); //生成0-1之间的随机数
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
运行结果:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
0.6
|
|
|
|
|
|
|
|
|
|
-1
|
|
|
|
|
|
|
|
|
|
-0
|
|
|
|
|
|
|
|
|
|
-1
|
|
|
|
|
|
|
|
|
|
0.6453756205275165
|
|
|
|
|
```
|
|
|
|
|
|
2020-06-12 15:51:38 +08:00
|
|
|
|
## Math.abs():获绝对值
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
|
|
|
|
方法定义:返回绝对值。
|
|
|
|
|
|
|
|
|
|
注意:
|
|
|
|
|
|
|
|
|
|
- 参数中可以接收字符串类型的数字,此时会将字符串做隐式类型转换,然后再调用 Math.abs() 方法。
|
|
|
|
|
|
|
|
|
|
代码举例:
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
console.log(Math.abs(2)); // 2
|
|
|
|
|
console.log(Math.abs(-2)); // 2
|
|
|
|
|
|
|
|
|
|
// 先做隐式类型转换,将 '-2'转换为数字类型 -2,然后再调用 Math.abs()
|
|
|
|
|
console.log(Math.abs('-2'));
|
|
|
|
|
|
|
|
|
|
console.log(Math.abs('hello')); // NaN
|
|
|
|
|
```
|
|
|
|
|
|
2020-06-12 15:51:38 +08:00
|
|
|
|
## Math.random() 方法:生成随机数
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
|
|
|
|
方法定义:生成 [0, 1) 之间的**随机浮点数**。
|
|
|
|
|
|
|
|
|
|
我们来看几个例子。
|
|
|
|
|
|
|
|
|
|
### 生成 [0, x) 之间的随机数
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
Math.round(Math.random()*x)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 生成 [x, y) 之间的随机数
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
Math.round(Math.random()*(y-x)+x)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 【重要】生成 [x, y]之间的随机整数
|
|
|
|
|
|
|
|
|
|
也就是说:生成两个整数之间的随机整数,**并且要包含这两个整数**。
|
|
|
|
|
|
|
|
|
|
这个功能很常用,我们可以将其封装成一个方法,代码实现如下:
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
/*
|
|
|
|
|
* 生成两个整数之间的随机整数,并且要包含这两个整数
|
|
|
|
|
*/
|
|
|
|
|
function getRandom(min, max) {
|
|
|
|
|
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
console.log(getRandom(1, 10));
|
|
|
|
|
```
|
|
|
|
|
|
2020-06-12 15:51:38 +08:00
|
|
|
|
### 举例:随机点名
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
|
|
|
|
根据上面的例子,我们还可以再延伸一下,来看看随机点名的例子。
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
/*
|
|
|
|
|
* 生成两个整数之间的随机整数,并且要包含这两个整数
|
|
|
|
|
*/
|
|
|
|
|
function getRandom(min, max) {
|
|
|
|
|
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const arr = ['许嵩', '邓紫棋', '毛不易', '解忧邵帅'];
|
|
|
|
|
const index = getRandom(0, arr.length - 1); // 生成随机的index
|
|
|
|
|
console.log(arr[index]); // 随机点名
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
2020-06-12 15:51:38 +08:00
|
|
|
|
## pow():乘方
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
|
|
|
|
如果想计算 `a 的 b 次方`,可以使用如下函数:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
Math.pow(a, b);
|
|
|
|
|
```
|
|
|
|
|
|
2020-06-12 15:51:38 +08:00
|
|
|
|
Math的中文是“数学”,pow是“幂”。
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
|
|
|
|
**举例1:**
|
|
|
|
|
|
|
|
|
|
![](http://img.smyhvae.com/20180117_1730.png)
|
|
|
|
|
|
|
|
|
|
代码实现:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
var a = Math.pow(3, Math.pow(2, 2));
|
|
|
|
|
console.log(a);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**举例2:**
|
|
|
|
|
|
|
|
|
|
![](http://img.smyhvae.com/20180117_1740.png)
|
|
|
|
|
|
|
|
|
|
代码实现:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
var a = Math.pow(Math.pow(3, 2), 4);
|
|
|
|
|
console.log(a);
|
|
|
|
|
```
|
|
|
|
|
|
2020-06-12 15:51:38 +08:00
|
|
|
|
## sqrt():开方
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
|
|
|
|
如果想计算数值a的开二次方,可以使用如下函数:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
Math.sqrt(a);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
sqrt即“square 开方”。比如:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
var a = Math.sqrt(36);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## url 编码和解码
|
|
|
|
|
|
|
|
|
|
URI (Uniform ResourceIdentifiers,通用资源标识符)进行编码,以便发送给浏览器。有效的URI中不能包含某些字符,例如空格。而这URI编码方法就可以对URI进行编码,它们用特殊的UTF-8编码替换所有无效的字符,从而让浏览器能够接受和理解。
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
encodeURIComponent(); //把字符串作为 URI 组件进行编码
|
|
|
|
|
decodeURIComponent(); //把字符串作为 URI 组件进行解码
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
举例:
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
var url = "http://www.cnblogs.com/smyhvae/";
|
|
|
|
|
|
|
|
|
|
var str = encodeURIComponent(url);
|
|
|
|
|
console.log(str); //打印url的编码
|
|
|
|
|
console.log(decodeURIComponent(str)); //对url进行编码后,再解码,还原为url
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
打印结果:
|
|
|
|
|
|
|
|
|
|
![](http://img.smyhvae.com/20180202_1432.png)
|
|
|
|
|
|
|
|
|
|
|
2022-08-06 15:56:15 +08:00
|
|
|
|
## 赞赏作者
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
2022-08-06 15:56:15 +08:00
|
|
|
|
创作不易,你的赞赏和认可,是我更新的最大动力:
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
2022-08-06 15:56:15 +08:00
|
|
|
|
![](https://img.smyhvae.com/20220401_1800.jpg)
|
2020-02-17 21:43:20 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|