【问题标题】:Infinity vs Number.POSITIVE_INFINITY无穷大与 Number.POSITIVE_INFINITY
【发布时间】:2019-03-14 00:04:15
【问题描述】:

我知道Number.POSITIVE_INFINITY 的值为Infinity,而Number.NEGATIVE_INFINITY 的值为-Infinity

我是否有理由使用Number.POSITIVE_INFINITY 而不是Infinity,或Number.NEGATIVE_INFINITY 而不是-Infinity

在相关说明中,isFinite 是否存在跨浏览器问题?

【问题讨论】:

    标签: javascript cross-browser numbers


    【解决方案1】:

    TL;DR

    Infinity 曾经是可覆盖的; Number.POSITIVE_INFINITYNumber.NEGATIVE_INFINITY 一直是只读的。


    Infinity 是全局对象的属性(window 是在浏览器中运行的 Javascript 的全局对象),而 Number.POSITIVE_INFINITYNumber 构造函数的属性。

    在 ECMAScript 第 5 版之前,可以覆盖全局对象的值属性:

    Infinity = 123;
    Infinity; // 123
    

    undefinedNaN 也是如此,它们也是全局对象的属性,过去是可覆盖的。

    Number 构造函数的属性一直是只读的:

    Number.POSITIVE_INFINITY = 123;
    Number.POSITIVE_INFINITY; // Infinity
    

    规格:

    ECMAScript 1st Edition(1997 年 6 月)

    15.1.1.2Infinity

    Infinity的初始值为+∞

    15.7.3.6Number.POSITIVE_INFINITY

    Number.POSITIVE_INFINITY 的值为+∞

    此属性应具有属性 { DontEnum, DontDelete, ReadOnly }。

    ECMAScript 5th Edition(2009 年 12 月)

    在 ES5 中,全局对象的值属性被设为只读:

    15.1.1.2Infinity

    Infinity 的值为+∞(参见 8.5)。

    此属性具有{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 属性。

    Number 构造函数的属性并没有真正改变,但是属性被重命名了:

    15.7.3.6Number.POSITIVE_INFINITY

    Number.POSITIVE_INFINITY 的值为+∞

    此属性具有{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 属性。

    截至 ES2018,这些定义没有改变。


    关于isFinite

    我曾经发过question,关于为什么Google Closure Library 为isFinite 实现了一个自定义函数,答案是可能存在一些跨浏览器的不一致,虽然目前还不清楚是哪个浏览器和哪个不一致。

    【讨论】:

    • 但是,除了 Infinity 在旧版浏览器中可以更改之外,您并没有真正回答 Number.POSITIVE_INFINITY 是否与 Infinity 给出相同的结果。
    • @jfriend00:如果我理解正确,这不是问题。它询问是否有理由使用Number.POSITIVE_INFINITY 而不是Infinity,我认为这个理由是合理的。
    • 我认为您可能会使用其中一个的原因之一是它们是否在某些方面实际上不同(例如,在某些情况下表现不同)。
    • 如果Infinity 被覆盖,它们的行为会有所不同:)
    猜你喜欢
    • 2022-08-12
    • 2019-03-19
    • 2013-11-29
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2015-03-22
    相关资源
    最近更新 更多