JavaScript 中的无穷数(Infinity)详解_基础知识

来源:脚本之家  责任编辑:小易  

www.zgxue.com防采集请勿采集本网。

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

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

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

1.Infinity(无穷)的定义

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

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

typeof Infinity; // => 'number'typeof -Infinity; // => 'number'

Infinity 是全局对象的属性:

window.Infinity; // => Infinity

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

Number.POSITIVE_INFINITY; // => Infinity

Number.NEGATIVE_INFINITY; // => -Infinity

2. Infinity 的特性

Infinity比任何有限数都大。

举几个例子 Look Look:

Infinity > 100;                     // => true

Infinity > Number.MAX_SAFE_INTEGER; // => true

Infinity > Number.MAX_VALUE;        // => true

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

Infinity + 1;        // => Infinity

Infinity + Infinity; // => Infinity

Infinity * 2;        // => Infinity

Infinity * Infinity; // => Infinity

Infinity / 2;        // => Infinity

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

10 / Infinity; // => 0

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

2 / 0; // => Infinity

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

Infinity / Infinity; // => NaN

Infinity % 2;        // => NaN

2.1 负无穷

负无穷小于任何有限数。

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

-Infinity < 100;                      // => true

-Infinity < -Number.MAX_SAFE_INTEGER; // => true

-Infinity < -Number.MAX_VALUE;        // => true

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

-Infinity < Infinity; // => true

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

Infinity * -1; // => -Infinity

Infinity / -2; // => -Infinity

-2 / 0;        // => -Infinity

3.判断无穷

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

Infinity === Infinity; // => true

-Infinity === -Infinity; // => true

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

Infinity === -Infinity; // => false

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

Number.isFinite(Infinity);  // => false

Number.isFinite(-Infinity); // => false

Number.isFinite(999);       // => true

4. 无穷的的使用情况

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

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请求、输入字段的值等)来解析一个数字。在简单的情况下,它会工作得很好:

parseFloat('10.5'); // => 10.5

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

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

parseFloat('Infinity'); // => Infinity

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

parseInt('10', 10); // => 10

parseInt('Infinity', 10); // => NaN

5.2 JSON 序列化

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

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:

2 * Number.MAX_VALUE; // => Infinity

Math.pow(10, 1000);   // => Infinity

5.4 Math 函数

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

const numbers = [1, 2];const empty = [];Math.max(...numbers); // => 2Math.max(...empty); // => -InfinityMath.min(...numbers); // => 1Math.min(...empty); // => Infinity

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

总结

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

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

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

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

原文:https://dmitripavlutin.com/infinity-in-javascript/

php 本身不难,现在互联网公司都用的技术,但不是核心技术.辛苦不辛苦不能依据语言本身说。如果在外包公司 用什么语言都很辛苦。php的工作路线最好是去大型互联网公司 或 中型公司发展较好。至于工资吗.看你能力了,你要是只会php 不会给太多。互联网开发相关技术都要有侧重的会些.比如 javascript(纯原生)以及插件,前端技术,数据库技术等等等等等.会多了 要钱的信心就多了。我做了一年多,刚开始给4000,一段时间后感觉工资捉襟见肘,要跳槽的时候涨到7000,缓解一下压力后感觉还是很少。技术是无穷无尽的,重在思想,培养学习能力。要是只为赚钱,劝君三思内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 简介javascript中positive_infinity值的使用
  • javascript中number.negative_infinity值的使用详解
  • javascript nan和infinity特殊值 [译]
  • javascript学习笔记之函数篇(四):arguments 对象
  • javascript深拷贝、浅拷贝和循环引用深入理解
  • parseint函数参数设置介绍
  • javascript 表单处理实现代码
  • 浅谈javascript date日期和时间对象
  • javascript对象创建及继承原理实例解剖
  • javascript学习笔记(五)正则表达式
  • javascript if...else 声明
  • javascript工厂方式定义对象
  • 删除javascript object中间的key
  • 谁干过PHP程序员,这个工作辛苦吗?工资怎么样?
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础知识javascript类库表单特效广告代码网页特效黑客性质javascript技巧domnode.jsjs其它首页javascript基础知识简介javascript中positive_infinity值的使用javascript中number.negative_infinity值的使用详解javascript nan和infinity特殊值 [译]javascript学习笔记之函数篇(四):arguments 对象javascript深拷贝、浅拷贝和循环引用深入理解parseint函数参数设置介绍javascript 表单处理实现代码浅谈javascript date日期和时间对象javascript对象创建及继承原理实例解剖javascript学习笔记(五)正则表达式javascript if...else 声明javascript工厂方式定义对象删除javascript object中间的keyjs split 的用法和定义 js splitjs 小数取整的函数window.location.href的用法(动态js array 数组详解javascript中判断两个字符串是否基于javascript 声明全局变量的三向javascript的数组中添加元素的javascript math ceil()、floor(html复选框和单选框 checkbox和rjavascript window.settimeout()深入解析javascript编程中的this关键字使javascript学习笔记之 对象篇(四) : fo深入解析javascript中的立即执行函数js date函数整理方便使用深入理解javascript系列(37):设计模式深入理解javascript系列(30):设计模式细说javascript函数从函数的构成开始解析javascript中的字符串类型与字符编码以python代码实例展示knn算法的实际运用浅谈javascript的polymer框架中的事件绑定
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved