mirror of https://github.com/qianguyihao/Web.git
update: Number 类型
This commit is contained in:
parent
85dee20745
commit
fad2b106d0
|
|
@ -18,27 +18,26 @@ console.log(typeof a);
|
|||
|
||||
上方代码的输出结果为:
|
||||
|
||||
```
|
||||
```bash
|
||||
number
|
||||
|
||||
number
|
||||
```
|
||||
|
||||
再次补充:在 JS 中,只要是数,就是 Number 数值型的。无论整浮、浮点数(即小数)、无论大小、无论正负,都是 Number 类型的。
|
||||
再次补充:在 JS 中,只要是数,就是 Number 数值型的。无论整浮、浮点数(即小数)、无论大小、无论正负,都是 Number 类型的。包括接下来要讲的Infinity、-Infinity、NaN 等特殊数值也是 Number 类型的。
|
||||
|
||||
### 数值范围
|
||||
|
||||
由于内存的限制,ECMAScript 并不能保存世界上所有的数值。
|
||||
ECMAScript 并不能表示世界上所有的数值。
|
||||
|
||||
- 最大值:`Number.MAX_VALUE`,这个值为: 1.7976931348623157e+308
|
||||
- 最大正数值:`Number.MAX_VALUE`,这个值为: 1.7976931348623157e+308
|
||||
|
||||
- 最小值:`Number.MIN_VALUE`,这个值为: 5e-324
|
||||
- 最小正数值:`Number.MIN_VALUE`,这个值为: 5e-324 ,或者 2的负1074 次方。它是能够在浮点精度范围内表示的最小正数(**不是最小负数**)。小于这个数的正数会被转成0。
|
||||
|
||||
如果使用 Number 表示的变量超过了最大值,则会返回 Infinity。
|
||||
|
||||
- 无穷大(正无穷):Infinity
|
||||
- `Infinity`:无穷大(正无穷)。比如 1/0 的值就是无穷大。
|
||||
|
||||
- 无穷小(负无穷):-Infinity
|
||||
- `-Infinity`:无穷小(负无穷)
|
||||
|
||||
注意:`typeof Infinity`的返回结果是 number。
|
||||
|
||||
|
|
@ -60,16 +59,16 @@ console.log('abc' * 'abcd'); //按理说,字符串相乘是没有结果的,
|
|||
|
||||
2. **Undefined 和任何数值计算的结果为 NaN。NaN 与任何值都不相等,包括 NaN 本身。**
|
||||
|
||||
3. 关于 isNaN() 函数,可以看后续的文章《JavaScript基础/typeof和数据类型转换》。
|
||||
3. 关于 isNaN() 函数,可以看后续要将的内容——数据类型转换。
|
||||
|
||||
### 连字符和加号的区别
|
||||
|
||||
键盘上的`+`可能是连字符,也可能是数字的加号。如下:
|
||||
|
||||
```
|
||||
console.log("我" + "爱" + "你"); //连字符,把三个独立的汉字,连接在一起了
|
||||
console.log("我+爱+你"); //原样输出
|
||||
console.log(1+2+3); //输出6
|
||||
```js
|
||||
console.log("我" + "爱" + "你"); // 连字符,把三个独立的汉字,连接在一起了
|
||||
console.log("我+爱+你"); // 原样输出
|
||||
console.log(1+2+3); // 输出6
|
||||
```
|
||||
|
||||
输出:
|
||||
|
|
@ -132,7 +131,17 @@ console.log(a);
|
|||
|
||||
虽然程序可以对`-`、`*`、`/`、`%``这几个符号自动进行“隐式转换”;但作为程序员,我们最好自己完成转换,方便程序的可读性。
|
||||
|
||||
关于隐式转换的详细内容,可以看后续的文章《JavaScript基础/typeof和数据类型转换》。
|
||||
关于隐式转换的详细知识,可以看后续的内容——和数据类型转换。
|
||||
|
||||
### 其他进制的数字
|
||||
|
||||
数字不仅有10进制,也有其他进制。
|
||||
|
||||
- 16 进制的数字,以`0x`开头
|
||||
|
||||
- 8 进制的数字,以`0`开头
|
||||
|
||||
- 2 进制的数字,`0b`开头(不是所有的浏览器都支持:chrome 和火狐支持,IE 不支持)
|
||||
|
||||
## 浮点数的运算
|
||||
|
||||
|
|
@ -168,39 +177,39 @@ console.log(a); //打印结果十分意外:0.30000000000000004
|
|||
```html
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src="https://cdn.bootcdn.net/ajax/libs/decimal.js/10.2.0/decimal.min.js"></script>
|
||||
<script>
|
||||
console.log('加法:');
|
||||
var a = 0.1;
|
||||
var b = 0.2;
|
||||
console.log(a + b);
|
||||
console.log(new Decimal(a).add(new Decimal(b)).toNumber());
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src="https://cdn.bootcdn.net/ajax/libs/decimal.js/10.2.0/decimal.min.js"></script>
|
||||
<script>
|
||||
console.log('加法:');
|
||||
var a = 0.1;
|
||||
var b = 0.2;
|
||||
console.log(a + b);
|
||||
console.log(new Decimal(a).add(new Decimal(b)).toNumber());
|
||||
|
||||
console.log('减法:');
|
||||
var a = 1.0;
|
||||
var b = 0.7;
|
||||
console.log(a - b);
|
||||
console.log(new Decimal(a).sub(new Decimal(b)).toNumber());
|
||||
console.log('减法:');
|
||||
var a = 1.0;
|
||||
var b = 0.7;
|
||||
console.log(a - b);
|
||||
console.log(new Decimal(a).sub(new Decimal(b)).toNumber());
|
||||
|
||||
console.log('乘法:');
|
||||
var a = 1.01;
|
||||
var b = 1.003;
|
||||
console.log(a * b);
|
||||
console.log(new Decimal(a).mul(new Decimal(b)).toNumber());
|
||||
console.log('乘法:');
|
||||
var a = 1.01;
|
||||
var b = 1.003;
|
||||
console.log(a * b);
|
||||
console.log(new Decimal(a).mul(new Decimal(b)).toNumber());
|
||||
|
||||
console.log('除法:');
|
||||
var a = 0.029;
|
||||
var b = 10;
|
||||
console.log(a / b);
|
||||
console.log(new Decimal(a).div(new Decimal(b)).toNumber());
|
||||
</script>
|
||||
</body>
|
||||
console.log('除法:');
|
||||
var a = 0.029;
|
||||
var b = 10;
|
||||
console.log(a / b);
|
||||
console.log(new Decimal(a).div(new Decimal(b)).toNumber());
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
|
|
@ -242,12 +251,12 @@ a = b;
|
|||
|
||||
将等号右边的值,赋给左边的变量;等号右边的变量,值不变。
|
||||
|
||||
来做几个题目。
|
||||
来做几个题目,看看数字是如何参与运算的。
|
||||
|
||||
举例 1:
|
||||
|
||||
```js
|
||||
// a b c
|
||||
// a b c
|
||||
var a = 1; // 1
|
||||
var b = 2; // 1 2
|
||||
var c = 3; // 1 2 3
|
||||
|
|
@ -270,7 +279,7 @@ console.log(c);
|
|||
举例 2:
|
||||
|
||||
```js
|
||||
//a b c
|
||||
// a b c
|
||||
var a = 1;
|
||||
var b = 2;
|
||||
var c = 3; // 1 2 3
|
||||
|
|
@ -293,7 +302,7 @@ console.log(c); // 8
|
|||
举例 3:
|
||||
|
||||
```js
|
||||
//a b
|
||||
//a b
|
||||
var a = '1';
|
||||
var b = 2; // "1" 2
|
||||
a = a + b; // "12" 2
|
||||
|
|
@ -312,7 +321,7 @@ console.log(b); // 输出212
|
|||
举例 4:
|
||||
|
||||
```js
|
||||
//a b
|
||||
//a b
|
||||
var a = '1';
|
||||
var b = 2;
|
||||
a = b + a; //"21" 2
|
||||
|
|
|
|||
|
|
@ -389,6 +389,17 @@ console.log(num);
|
|||
|
||||
如果你对打印结果感到震惊,请仔细看上面的代码注释。就是说,无论 parseInt() 里面的进制参数是多少,最终的转换结果是十进制。
|
||||
|
||||
我们知道,八进制的数字是用0开头进行表示。比如`"070"`这个字符串,如果我调用 parseInt() 转成数字时,有些浏览器会当成 8 进制解析,有些会当成 10 进制解析。
|
||||
|
||||
所以,比较建议的做法是:可以在 parseInt()中传递第二个参数,来指定当前数字的进制。例如:
|
||||
|
||||
```javascript
|
||||
var a = '070';
|
||||
|
||||
a = parseInt(a, 8); //将 070 当成八进制来看待,转换结果为十进制。
|
||||
console.log(a); // 打印结果:56。这个地方要好好理解。
|
||||
```
|
||||
|
||||
我们来看下面的代码,打印结果继续震惊:
|
||||
|
||||
```javascript
|
||||
|
|
@ -414,6 +425,8 @@ console.log(parseFloat(a)); // 打印结果:123.456
|
|||
|
||||
parseFloat() 的几个特性,可以参照 parseInt()。
|
||||
|
||||
|
||||
|
||||
## 三、转换为 Boolean
|
||||
|
||||
### 转换结果列举【重要】
|
||||
|
|
@ -471,24 +484,9 @@ console.log(0 == true); // 打印结果:false
|
|||
|
||||
使用 Boolean()函数可以显式转换为 Boolean 类型。
|
||||
|
||||
## 知识补充:其他进制的数字
|
||||
|
||||
- 16 进制的数字,以`0x`开头
|
||||
|
||||
- 8 进制的数字,以`0`开头
|
||||
|
||||
- 2 进制的数字,`0b`开头(不是所有的浏览器都支持:chrome 和火狐支持,IE 不支持)
|
||||
|
||||
比如`070`这个字符串,如果我调用 parseInt()转成数字时,有些浏览器会当成 8 进制解析,有些会当成 10 进制解析。
|
||||
|
||||
所以,比较建议的做法是:可以在 parseInt()中传递第二个参数,来指定当前数字的进制。例如:
|
||||
|
||||
```javascript
|
||||
var a = '070';
|
||||
|
||||
a = parseInt(a, 8); //将 070 当成八进制来看待,转换结果为十进制。
|
||||
console.log(a); // 打印结果:56。这个地方要好好理解。
|
||||
```
|
||||
|
||||
## 隐式类型转换
|
||||
|
||||
|
|
@ -513,13 +511,15 @@ console.log(a); // 打印结果:56。这个地方要好好理解。
|
|||
isNaN(参数);
|
||||
```
|
||||
|
||||
解释:判断指定的参数是否为 NaN(非数字类型),返回结果为 Boolean 类型。也就是说:**任何不能被转换为数值的参数,都会让这个函数返回 true**。
|
||||
解释:判断指定的参数是否**不是数字**(NaN,非数字类型),返回结果为 Boolean 类型。**不是数字时返回 true**,是数字时返回 false。
|
||||
|
||||
在做判断时,会进行隐式类型转换。也就是说:**任何不能被转换为数值的参数,都会让这个函数返回 true**。
|
||||
|
||||
**执行过程**:
|
||||
|
||||
(1)先调用`Number(参数)`函数;
|
||||
|
||||
(2)然后将`Number(参数)`的返回结果是否为数值。如果不为数值,则最终结果为 true;如果为数值,则最终结果为 false。
|
||||
(2)然后判断`Number(参数)`的返回结果是否为数值。如果不为数字,则返回结果为 true;如果为数字,则返回结果为 false。
|
||||
|
||||
代码举例:
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue