我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript中Infinity(无穷数)的使用和注意事项

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript中Infinity(无穷数)的使用和注意事项

前言

JavaScript 中的 Infinity 是一个可以应用于任何变量的数值,表示无穷大。下面就来看看 Infinity 是如何工作的,以及使用时的注意事项。

1. Infinity 概念

Infinity 是全局对象的一个属性,即它是一个全局变量:

console.log(window.Infinity); // Infinity
console.log(window.Infinity > 100); // true
console.log(window.Infinity < 100); // false

Infinity 的初始值是 Number.POSITIVE_INFINITY。Infinity(正无穷大)大于任何值。在数学上,这个值的行为与无穷大相同。例如,任何正数乘以Infinity等于Infinity,任何数字除以Infinity等于 0。在 ECMAScript 5 的规范中, Infinity 是只读的,即不可写、不可枚举或不可配置。

数字 Infinity 是 JavaScript 中的一个特殊值,它的值约为 1.79e+308 或 2¹⁰²⁴——JavaScript 中可以存储为数字类型的最大值。

let bigNumber = 1e308,
    biggerNumber = 1e309;

console.log(bigNumber); // 1e+308
console.log(biggerNumber); // Infinity

根据规范,Infinity 表示所有大于 1.7976931348623157e+308 的值:

let largeNumber = 1.7976931348623157e+308,
    largerNumber = 1.7976931348623157e+309;

console.log(largeNumber); // 1.7976931348623157e+308
console.log(largerNumber); // Infinity

我们可以在浏览器的控制台输入9,当输入308位时,结果还是1e+308,当输入309位时,就会打印出 Infinity:

所有浏览器都是支持 Infinity 的:

2. Infinity 正负

Infinity 是有正负之分的,Infinity表示无穷大,-Infinity表示无穷小。超出 1.797693134862315E+308 的数值即为 Infinity,小于 -1.797693134862316E+308 的数值为无穷小。

console.log(1.7976931348623157e+309); // Infinity
console.log(-1.7976931348623157e+309); // -Infinity

可以通过以下方式来得到 Infinity:

console.log(Infinity)                 // Infinity
console.log(Number.POSITIVE_INFINITY) // Infinity
console.log(Math.pow(2,1024))         // Infinity
console.log(1.8e+308)                 // Infinity
console.log(1/0)                      // Infinity

可以通过以下方式来得到 -Infinity:

console.log(-Infinity)                 // -Infinity
console.log(Number.NEGATIVE_INFINITY)  // -Infinity
console.log(-1*Math.pow(2,1024))       // -Infinity
console.log(-1.8e+308)                 // -Infinity
console.log(1/-0)                      // -Infinity

将正数除以 Infinity 会得到 0;Infinity 除以 Infinity 会得到 NaN;正数除以 -Infinity 或负数除以 Infinity 得到 -0:

console.log(1/Infinity) // 0
console.log(Infinity/Infinity) // NaN
console.log(1/-Infinity) // -0

3. Infinity 计算

Infinity 的行为基本上类似于数学上的无穷大,加、减或乘以它仍然是 Infinity:

console.log(Infinity + 3) // Infinity
console.log(Infinity - 3) // Infinity
console.log(Infinity * 3) // Infinity
console.log(Infinity / 3) // Infinity

console.log(Math.pow(Infinity, 2)) // Infinity

console.log(Infinity + Infinity) // Infinity
console.log(Infinity - Infinity) // NaN
console.log(Infinity * Infinity) // NaN
console.log(Infinity / Infinity) // NaN

对于 JavaScript 中所有的数字,即使是强大的 Infinity,使用 NaN 执行数学运算都得到 NaN:

console.log(Infinity + NaN) // NaN
console.log(Infinity - NaN) // NaN
console.log(Infinity * NaN) // NaN
console.log(Infinity / NaN) // NaN

console.log(Math.pow(Infinity, NaN)) // NaN

4. Infinity 和 BigInt

在 JavaScript 中,对于任意大的整数值,有 BigInt 原始类型。但是,BigInt 不能很好地与 Infinity 配合使用,因为 Infinity 是 JavaScript 原始类型 number,不能与 BigInt 混合使用。

try{console.log(37/0)} catch(e) {console.log(e)} // Infinity

// BigInts 用数字后面的 n 表示:
try{console.log(37n/0)} catch(e) {console.log(e)} // TypeError: "can't convert BigInt to number"
try{console.log(37/0n)} catch(e) {console.log(e)} // TypeError: "can't convert BigInt to number"
try{console.log(37n/0n)} catch(e) {console.log(e)} // RangeError: "BigInt division by zero"

// 可以将 BigInts 转换为 Numbers:
try{console.log(Infinity+37n)} catch(e) {console.log(e)} // TypeError: "can't convert BigInt to number"
try{console.log(Infinity+Number(37n))} catch(e) {console.log(e)} // Infinity

// 可能不需要BigInts,因为它可以是任意大小,并且 JavaScript 中的最大安全整数只有 16 位长:
console.log(Number.MAX_SAFE_INTEGER) // 9007199254740991

5. Infinity 检查

可以通过使用 == 或 === 将值与 Infinity 进行比较来检查 Infinity:

console.log(Infinity == 1/0) // true
console.log(Infinity === 1/0) // true

// ==将强制字符串转换为数字,但===不会:
console.log(Infinity == "Infinity") // true
console.log(Infinity === "Infinity") // false

// 使用除法运算符将在比较之前强制执行强制转换:
console.log(Infinity == "1"/"0") // true
console.log(Infinity === "1"/"0") // true

// 当强制转换后值为NaN时:
console.log(Infinity == "1/0") // false
console.log(Infinity === "1/0") // false

当然,在处理 Infinity 时,ES6 中的 Object.is() 与 === 运算符的工作方式相同:

console.log(Object.is(Infinity, 1/0)) // true
console.log(Infinity === 1/0) // true
console.log(Infinity == 1/0) // true

console.log(Object.is(Infinity, "Infinity")) // false
console.log(Infinity === "Infinity") // false
console.log(Infinity == "Infinity") // true

可以使用辅助函数 Number.isFinite() 检查值是否为有限数(不是 Infinity、-Infinity 或 NaN)。还有一个全局 isFinite() 函数,它会执行强制类型转化,也就是它会先尝试将值转换为数字类型,然后再检查它是否为有限数。

console.log(isFinite(45)); // true
console.log(isFinite(-45)); // true
console.log(isFinite('45')); // true
console.log(isFinite('-75')); // true
console.log(isFinite(Infinity)); // false
console.log(isFinite(1.7976931348623157e+308)); // true
console.log(isFinite(1.7976931348623157e+309)); // false

6. 注意事项

(1)max() 和 min()

如果没有传入值,Math.max()(返回传入值中的最大值)将返回 -Infinity,Math.min()(返回传入值中的最小值)将返回Infinity。

console.log(Math.max()); // -Infinity
console.log(Math.min()); // Infinity

(2)Infinity 作为默认值

由于 Infinity 大于所有数字,因此它在检查数组中的最小数字的函数中可能很有用:

function findMinimum(numbers) {
  let min = Infinity;
  for (const n of numbers) {
    if (n < min) {
      min = n
    };
  }
  return min;
}

console.log(findMinimum([20, 6, 90])); // 6

因为 Infinity 大于所有数字,所以除非数组中的所有数字都超过 Infinity 阈值,否则结果不会有任何问题。

(3)转换为 JSON 时

在处理 JSON 数据时,如果使用 JSON.stringify() 将 JavaScript 对象转换为有效的 JSON 字符串,Infinity将会被转化为null:

let myJSON = {
  value1: 6,
  value2: 'Example',
  value3: Infinity,
  value4: -Infinity,
  value5: 1.7976931348623157e+309
};

console.log(JSON.stringify(myJSON, null, 2));

打印结果如下:

{
  "value1": 6,
  "value2": "Example",
  "value3": null,
  "value4": null,
  "value5": null
}

(4)parseFloat() 和 parseInt()

parseFloat() 用来解析一个字符串,并返回一个浮点数。parseInt() 用来解析一个字符串,并返回一个整数。parseFloat() 可以正确解析Infinity, 而 parseInt() 无法识别 Infinity :

总结

到此这篇关于JavaScript中Infinity(无穷数)的文章就介绍到这了,更多相关js的无穷数Infinity内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript中Infinity(无穷数)的使用和注意事项

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Springboot中@RequestBody注解使用的注意事项

这篇文章将为大家详细讲解有关Springboot中@RequestBody注解使用的注意事项,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。@RequestBody注解踩坑@RequestBody json
2023-06-29

C语言中scanf函数的使用技巧和注意事项

快速掌握C语言中scanf函数的技巧与注意事项在C语言中,scanf函数是用来从标准输入中读取数据的函数。它可以读取多种类型的数据,如整数、浮点数、字符等。掌握好scanf函数的使用技巧和注意事项,将能够更加高效地处理输入,提高代码的质量
C语言中scanf函数的使用技巧和注意事项
2024-02-24

Js中parseInt的使用及注意事项

parseInt是一种字符串转数字的,下面这篇文章主要给大家介绍了关于Js中parseInt的使用及注意事项的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-01-03

优化 PHP 函数:使用技巧和注意事项

通过遵循以下优化技巧和注意事项,可以显著提高 php 函数性能:保持函数简洁。避免局部变量,改用全局变量。避免使用字符串,改用常量或枚举。使用内存缓存。启用 opcache。同时,需要注意以下注意事项:避免递归。避免匿名函数。避免耦合。使用
优化 PHP 函数:使用技巧和注意事项
2024-04-11

golang函数注释的使用方法和注意事项是什么

这篇文章主要介绍了golang函数注释的使用方法和注意事项是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇golang函数注释的使用方法和注意事项是什么文章都会有所收获,下面我们一起来看看吧。一、函数注释概
2023-07-05

聊聊Git的使用方法和注意事项

作为程序员和开发人员必备的版本控制工具,Git已经成为了主流。但是,很多人在使用 Git 时常常会遇到一些问题,比如常见的 Git 命令不知道该如何使用、出现冲突怎么办等等。那么,本文就为大家介绍一下 Git 的使用方法和注意事项,帮助大家
2023-10-22

golang 反射的机制和使用注意事项

go 语言的反射通过内置的 reflect 包实现,使用 type 和 value 类型分别表示类型和值。反射常见用途包括动态类型检查、代码生成、元编程和序列化/反序列化。使用注意事项包括性能开销、安全性问题和易用性挑战。Go 语言反射:深
golang 反射的机制和使用注意事项
2024-05-05

mysql中union和union all的使用及注意事项

在MySQL中,UNION和UNION ALL是用于合并两个或多个SELECT语句的结果集的操作符。它们的主要区别在于UNION会自动去除重复的行,而UNION ALL会保留所有行。使用方法:1. UNION语句的语法:SELECT col
2023-08-11

解析Golang中接口的使用场景和注意事项

Golang中接口的使用场景和注意事项解析Golang作为一门静态类型语言,引入了接口(interface)的概念,以便更好地支持面向对象的编程方式。接口在Golang中是一个非常重要的概念,在实际开发中经常用到。本文将从使用场景和注意事
解析Golang中接口的使用场景和注意事项
2024-01-24

pgsql中nullif函数使用要注意哪些事项

在使用pgsql中的nullif函数时,需要注意以下事项:nullif函数接受两个参数,如果这两个参数的值相等,则返回null,否则返回第一个参数的值。使用nullif函数时,需确保两个参数的数据类型一致,否则可能会导致错误。确保nulli
pgsql中nullif函数使用要注意哪些事项
2024-05-14

sql中array函数使用要注意哪些事项

在 SQL 中,ARRAY 函数用于将输入的元素转换为数组。在使用 ARRAY 函数时,需要注意以下事项:数据类型:确保输入的元素数据类型一致,否则可能会导致错误或意外结果。NULL 值:ARRAY 函数不支持包含 NULL 值的数组,因此
sql中array函数使用要注意哪些事项
2024-04-20

mysql中date_diff函数使用要注意哪些事项

在使用MySQL中的DATE_DIFF函数时,需要注意以下几点事项:DATE_DIFF函数用于计算两个日期之间的差值,返回的结果以天数为单位。参数必须为日期型数据,否则会返回NULL。第一个参数为较大的日期,第二个参数为较小的日期,否则会返
mysql中date_diff函数使用要注意哪些事项
2024-04-23

mysql中union和union all的使用及注意事项

这篇文章主要给大家介绍了关于mysql中union和union all的使用及注意事项的相关资料,需要的朋友可以参考下
2022-11-13

oracle中regexp函数使用要注意哪些事项

使用Oracle中的regexp函数时,需要注意以下事项:正则表达式语法:了解正则表达式的语法和使用方法,以确保正确地编写正则表达式模式。性能问题:正则表达式的使用可能会对性能造成影响,特别是在处理大量数据时。尽量避免在大型数据集上使用复杂
oracle中regexp函数使用要注意哪些事项
2024-04-30

编程热搜

目录