Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaScript 中的无穷数(Infinity)

JavaScript 中的无穷数(Infinity)

作者头像
前端小智@大迁世界
发布于 2020-05-12 06:38:04
发布于 2020-05-12 06:38:04
8.4K00
代码可运行
举报
文章被收录于专栏:终身学习者终身学习者
运行总次数:0
代码可运行

作者: Dmitri Pavlutin 译者:前端小智 来源:dmitripavlutin


为了保证的可读性,本文采用意译而非直译。

Infinity(无穷大)在 JS 中是一个特殊的数字,它的特性是:它比任何有限的数字都大,如果不知道 Infinity, 我们在一些运算操作遇到时,就会觉得很有意思。

现在我们来看看 JS 中的Infinity 属性,了解用例并解决一些常见的陷阱。

1.Infinity(无穷)的定义

无穷可以分为两种,正无穷和负无穷,JS 中对应的表示方式为:+Infinity(或者Infinity) 和 -Infinity

这意味着Infinity-Infinity(小于任何有限数的数字)都是number类型的特殊值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typeof Infinity;  // => 'number'
typeof -Infinity; // => 'number'

Infinity 是全局对象的属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.Infinity; // => Infinity

另外,Number函数也有两个属性来表示正负无穷大:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Number.POSITIVE_INFINITY; // => Infinity
Number.NEGATIVE_INFINITY; // => -Infinity

2. Infinity 的特性

Infinity比任何有限数都大。

举几个例子 Look Look:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Infinity > 100;                     // => true
Infinity > Number.MAX_SAFE_INTEGER; // => true
Infinity > Number.MAX_VALUE;        // => true

Infinity 在加法、乘法和除法等算术运算中用作操作数时会产生有趣的效果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Infinity + 1;        // => Infinity
Infinity + Infinity; // => Infinity

Infinity * 2;        // => Infinity
Infinity * Infinity; // => Infinity

Infinity / 2;        // => Infinity

一些Infinity 的运算得到有限的数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
10 / Infinity; // => 0

一个有限的数除以0得到 Infinity 结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2 / 0; // => Infinity

对无穷数进行概念上不正确的运算会得到NaN。 例如,不能除以无限数,也无法确定无限数是奇数还是偶数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Infinity / Infinity; // => NaN
Infinity % 2;        // => NaN
2.1 负无穷

负无穷小于任何有限数

-Infinity 与一些有限数字进行比较:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-Infinity < 100;                      // => true
-Infinity < -Number.MAX_SAFE_INTEGER; // => true
-Infinity < -Number.MAX_VALUE;        // => true

同时,负无穷小于正无穷:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-Infinity < Infinity; // => true

当使用不同操作符操作数时,也可能会得到负无穷:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Infinity * -1; // => -Infinity
Infinity / -2; // => -Infinity
-2 / 0;        // => -Infinity

3.判断无穷

幸运的是,Infinity等于相同符号的Infinity

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Infinity === Infinity; // => true
-Infinity === -Infinity; // => true

但前面的符号不一样就不相等,就也很好理解:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Infinity === -Infinity; // => false

JSt有一个特殊的函数Number.isFinite(value),用于检查提供的值是否有限数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Number.isFinite(Infinity);  // => false
Number.isFinite(-Infinity); // => false
Number.isFinite(999);       // => true

4. 无穷的的使用情况

当我们需要初始化涉及数字比较的计算时,无穷值就非常方便。例如,在数组中搜索最小值时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function findMin(array) {
  let min = Infinity;
  for (const item of array) {
    min = Math.min(min, item);
  }
  return min;
}

findMin([5, 2, 1, 4]); // => 1

min变量使用Infinity初始化。 在第一次for()迭代中,最小值成为第一项。

5. Infinity 的的一些坑

我们很可能不会经常使用Infinity值。 但是,值得知道何时会出现Infinity值。

5.1. 解析数据

假设 JS 使用一个输入(POST请求、输入字段的值等)来解析一个数字。在简单的情况下,它会工作得很好:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
parseFloat('10.5'); // => 10.5

parseFloat('ZZZ'); // => NaN

这里需要小心的,parseFloat()'Infinity'字符串解析为实际的Infinity数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
parseFloat('Infinity'); // => Infinity

另一个是使用parseInt()来解析整数,它无法将'Infinity'识别为整数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
parseInt('10', 10); // => 10

parseInt('Infinity', 10); // => NaN
5.2 JSON 序列化

JSON.stringify()Infinity数字序列化为null

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const worker = {
 salary: Infinity
};

JSON.stringify(worker); // => '{ "salary": null }'

salary 属性值为Infinity但是当字符串化为JSON时,"salary"值将变为null

5.3 最大数溢出

Number.MAX_VALUE是 JS 中最大的浮点数。

为了使用甚至大于Number.MAX_VALUE的数字,JS 将该数字转换为Infinity

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2 * Number.MAX_VALUE; // => Infinity
Math.pow(10, 1000);   // => Infinity
5.4 Math 函数

JS 中Math命名空间的某些函数可以返回Infinity:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const numbers = [1, 2];
const empty = [];

Math.max(...numbers); // => 2
Math.max(...empty);   // => -Infinity

Math.min(...numbers); // => 1
Math.min(...empty);   // => Infinity

在不带参数的情况下调用Math.max()时,返回-Infinity,而Math.min()则相应地返回Infinity。 如果尝试确定一个空数组的最大值或最小值,那结果后面人感到意外。

总结

JS中的Infinity表示无穷数的概念。 任何有限数均小于Infinity,而任何有限数均大于-Infinity

比较 JS 中的无穷值很容易:Infinity === Infinitytrue。特殊的函数Number.isFinite()确定提供的参数是否是一个有限的数字。

在涉及数字比较的算法时,可以使用Infinite初始化变量,用例是寻找数组的最小值。

解析来自输入的数字时,必须小心InfinityNumber('Infinity')parseFloat('Infinity')返回实际的Infinity。 当使用JSON.stringify()序列化时,Infinity变为null


原文:https://dmitripavlutin.com/in...

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ES6之Number
Number - 二进制与八进制 >ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。 - Number新增方法 + Number.isFinite() > 用来检查一个数值是否为有限的(finite),即不是Infinity。 + Number.isNaN() > 用来检查一个值是否为NaN。 + Number.parseInt()/Number.parseFloat() > 将window对象的pars
19组清风
2021/11/15
3770
ES6系列_5之数字操作
使用Number.isFinite( )来进行数字验证,只要是数字,不论是浮点型还是整形都会返回true,其他时候会返回false。
wfaceboss
2019/04/08
5360
JavaScript Number 对象(下)
NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。
陈不成i
2021/07/20
3220
【JS】125-重温基础:数字
前置基础: 在JavaScript中,数字为双精度浮点类型(即一个数字范围只能在-(253-1)和(253-1)之间),整数类型也一样。 另外数字类型也可以是以下三种符号值:
pingan8787
2020/05/13
2.6K0
JavaScript 数字相关的属性方法
本文遵守创作共享CC BY-NC-SA 4.0协议 网络平台如需转载必须与本人联系确认。
前端GoGoGo
2018/08/24
5710
ES6 数值的扩展
ES6 提供了二进制和八进制数值的新写法,分别用前缀 0b/0B 和 0o/0O表示。
Leophen
2019/08/23
5330
ES6之数值的扩展
之前说过,严格模式八进制不能使用前缀0表示,ES6规定必须使用0o。ES6提供了二进制和八进制的新写法:
wade
2020/04/23
4200
JavaScript学习笔记017-数值方法0Math0定时器
Author:Mr.柳上原 付出不亚于任何的努力 愿我们所有的努力,都不会被生活辜负 不忘初心,方得始终 我没有很刻意的去想念你 因为我知道 遇到了就应该感恩 路过了就需要释怀 我只是在很多很多的小瞬间 想起你 比如一部电影 一首歌 一句歌词 一条马路 和 无数个闭上眼睛的瞬间 假如没有遇上你 我会不会有另一种人生? 不管有没有结果 我还是宁愿与你相逢 __张小娴 <!DOCTYPE html> <!-- 文档类型:标准html文档 --> <html lang='e
Mr. 柳上原
2018/09/05
4410
JS原生引用类型解析5-Number类型
(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)
love丁酥酥
2018/08/27
2.2K0
ES6学习笔记(四)
ES6在Number对象上新提供了Number.isFinite() 和Number.isNaN()两个方法,Number.isFinite()用来检查一个数值是否为有限的,Number.isNaN()用来检查一个值是否为NaN.
拿我格子衫来
2022/01/23
3460
一篇文章带你了解JavaScript中的语法,数据类型,流程控制语句以及函数
JavaScript有多重要啊,才能让我说说一下,其中的语法,操作符,数据类型,内置功能等。
达达前端
2019/12/26
5640
一篇文章带你了解JavaScript中的语法,数据类型,流程控制语句以及函数
ECMAScript数据类型关系总结
ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String
csxiaoyao
2019/02/15
8590
ES6入门之数值的扩展
与传统的isFinite() 和 isNaN() 的区别在于,传统方法优先调用Number()将非数值的值转为数值,在进行判断。而Number.isFinite()对于非数值一律返回false, Number.isNaN()只有对于NaN才返回true,非NaN一律返回false。
执行上下文
2022/07/26
4930
Javascript权威指南
The not-a-number value has one unusual feature in JavaScript: it does not compare equal to any other value, including itself.
全栈程序员站长
2021/12/27
8560
从零开始学 Web 之 JavaScript(二)变量
基础数据类型: String,Number,Boolean,unsigned、null
Daotin
2018/08/31
5960
Javascript中的基本数据类型
Undefined 在var或者let中声明了变量但没有赋值时,这个变量的值就是undefined. 使用typeof关键字检测未声明变量的类型为undefined. Null null表示一个空对象指针,所以用typeof检测null时,会返回object undefine派生自null, null == undefined 为true, null === undefined为false Boolean true false 区分大小写 空字符串、0和NaN、null、undefined转换为boolea
宅蓝三木
2018/02/07
6560
20个常用的JavaScript简写技巧
任何编程语言的简写技巧都能够帮助你编写更简练的代码,让你用更少的代码实现你的目标。让我们一个个来看看 JavaScript 的简写技巧吧。
深度学习与Python
2020/12/07
1.1K0
大话 JavaScript(Speaking JavaScript):第十一章到第十五章
JavaScript 对所有数字都使用单一类型:它将它们全部视为浮点数。但是,如果小数点后没有数字,则不显示小数点:
ApacheCN_飞龙
2024/01/12
6700
《JavaScript程序设计》第2课:JS类型系统
JS类型系统可以分为标准类型和对象类型,进一步标准类型又可以分为原始类型和引用类型,而对象类型又可以分为内置对象类型、普通对象类型、自定义对象类型。 1. 标准类型 标准类型共包括了6个分别是:und
陈树义
2018/04/13
8530
《JavaScript程序设计》第2课:JS类型系统
【Java 进阶篇】JavaScript 中的全局对象和变量
JavaScript 是一门非常强大的编程语言,它提供了许多全局对象和变量,以便于在整个应用程序中共享数据和功能。本文将详细介绍 JavaScript 中的全局对象和变量,包括全局对象、全局变量、全局函数以及它们的用途和示例。
繁依Fanyi
2023/10/19
4990
相关推荐
ES6之Number
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验