6

为什么将 Infinity 属性用作命令(而不是结果)

例如,下面的这段代码有效,但结果不是我所期望的。

alert(isOdd(Infinity));

function isOdd(num) { return num%2==1; }

4

2 回答 2

7

MDN 参考

Infinity 是全局对象的属性,即它是全局范围内的变量。

Infinity 的初始值为 Number.POSITIVE_INFINITY。值 Infinity(正无穷大)大于任何其他数字。这个值在数学上表现得像无穷大;例如,任何正数乘以 Infinity 都是 Infinity,任何除以 Infinity 都是 0。

首先这是什么意思?本质上,无穷大是一个概念,而不是实际值。数学是基于概念而不是价值。例如,数字不是值,数字是。

数字 7 是预期值的概念,罗马人将其写为 VII,在标准形式 (BASE-10) 中,您将其写为 7。在二进制 (BASE-2) 中,您将其写为 111。如果您想使用只要正确应用该概念,三角形或任何其他标记也可以。

现在您知道了,无穷大只是比任何其他数字都大的概念。它没有任何价值。无限循环的基本概念意味着永远运行的唯一原因是因为从概念上讲,这意味着无论您处于该循环的任何数字迭代(无论是 1 还是一百万),无限都将始终大于该数字。

在编码中应用概念有很多方法,这就是为什么每个人的代码运行方式都不同,但例如:

来自 w3schools 的样本:

function findMax(x) {
    var i;
    var max = -Infinity;
    for(i = 0; i < arguments.length; i++) {
        if (arguments[i] > max) {
            max = arguments[i];
        }
    }
    return max;
} 
document.getElementById("demo").innerHTML = findMax(1, 123, 500, 115, 44, 88);

在该站点的示例中,他们将 6 个值的参数传递给函数 findMax findMax(1, 123, 500, 115, 44, 88);

然后他们使用循环在参数长度处停止。在循环中,他们将最大值从无穷大的概念重新分配给一个值,如果再次循环时大于该值,则最大值将更改为新的高值。

为什么这很重要?因为在示例中,他们使用负无穷大的概念,这只是无穷大的值负减。人们很容易争辩说 0 可以代替 -Infinity 但他们错了。这就是为什么。

如果您的值范围取决于在上面的公式中也传递的负值怎么办?如果您所拥有的只是从用户输入或其他函数中动态捕获的负值怎么办?

考虑 findMax 是 findMax(-1, -10, -15, -20);

0 会给出一个错误的输出,它是正确的最大值,这不是你想要的。你想要 -1 一个作为输出。还有其他方法可以实现解决方案,但为了讨论无限概念,我将在此结束。

我希望这对 Infinity 概念的过程有更多的了解。

于 2015-11-21T16:29:47.557 回答
3

Infinity是全局对象的一个​​属性,它包含一个表示无穷大的数学概念的数值。我不知道任何可以将其称为“命令”的正常定义。

关于您的编辑,应该返回 false (我运行它以确认这种怀疑,它在我的浏览器上确实如此)。这是正确的,因为无穷大通常不被视为奇数。

于 2013-05-08T23:56:40.763 回答