diff --git a/04-JavaScript基础/07-基本数据类型:Number.md b/04-JavaScript基础/07-基本数据类型:Number.md index 3055d34..64261d6 100644 --- a/04-JavaScript基础/07-基本数据类型:Number.md +++ b/04-JavaScript基础/07-基本数据类型:Number.md @@ -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 - - - - Document - - - - + - + console.log('除法:'); + var a = 0.029; + var b = 10; + console.log(a / b); + console.log(new Decimal(a).div(new Decimal(b)).toNumber()); + + ``` @@ -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 diff --git a/04-JavaScript基础/09-数据类型转换.md b/04-JavaScript基础/09-数据类型转换.md index bbbd835..d202541 100644 --- a/04-JavaScript基础/09-数据类型转换.md +++ b/04-JavaScript基础/09-数据类型转换.md @@ -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。 代码举例: