【问题标题】:Is there or isn't there an integer type in JavaScript?JavaScript 中是否存在整数类型?
【发布时间】:2016-02-19 18:56:57
【问题描述】:

我刚开始学习 Javascript,我立刻被 Mozilla 的 A re-introduction to JavaScript (JS tutorial) 中看似矛盾的陈述弄糊涂了。

一只手:

"在 JavaScript 中没有整数这样的东西,所以你必须 如果您习惯用 C 语言进行数学运算,请注意算术 或 Java。”

另一方面(紧接在那段之后):

"在实践中,整数值被视为 32 位整数(并且是 在某些浏览器实现中以这种方式存储),可以 对于按位运算很重要。”

"您可以使用内置的 parseInt() 将字符串转换为整数 函数。”

那么,JavaScript 中有没有整数之类的东西?

【问题讨论】:

  • 是的,有整数值,但没有整数Type,只有Number。实现细节,例如它们的存储方式,不是语言规范的一部分。
  • @RobG 您的简洁答案很完整,完全消除了我的困惑。请将其发布为答案,以便我接受。非常感谢。
  • @RobG 它肯定是规范的一部分:“对应于双精度 64 位二进制格式 IEEE 754-2008 值的原始值”
  • 当你对数字进行按位运算时,它会变得特别。
  • @AimanAl-Eryani 他们是the abandoned ES4 draft的一部分。

标签: javascript integer


【解决方案1】:

更新:随着新的 ES2020 标准发布,这个答案不再完全正确,请参阅 the other answer(来自 @Mathias Lykkegaard Lorenzen)关于 BigInt 的详细信息。

JS中只有Number这个数据类型代表数字。

在内部实现为IEEE 754双精度浮点数。

这意味着 - 从技术上讲,没有表示整数的专用数据类型。

实际上,这意味着我们只能安全地使用上述标准可以安全表示的数字。它包括范围内的整数值:[-9007199254740991; 9007199254740991]。两个值都定义为常量:Number.MIN_SAFE_INTEGERNumber.MAX_SAFE_INTEGER 对应。

【讨论】:

  • 除了数字范围之外,每个人还应该考虑浮点的特殊值,例如无穷大(在 JS 中不被零除)、-infinity、NaN 甚至 -0(与零不同! )。
【解决方案2】:

我应该提一下,实际上有一个名为BigInt 的类型表示一个真正的整数。

但是,因为它不能与Number 一起使用,而且通常只用于较大的数字是一个好主意,所以我不建议这样做。

我认为这值得一提。

var n = BigInt(1337);
console.log(typeof n); //prints "bigint"

【讨论】:

  • 也可以写成var n = 1337n
【解决方案3】:

我相信提问者已经找到了他/她的答案。但是对于像我这样的其他人,您可以使用 Number.isInteger() 方法在 JavaScript 中检查数字是否为 integerMDN

【讨论】:

    【解决方案4】:

    啊,是的,这可能很令人困惑。在 Javascript 中,变量的类型是隐式定义的。

    函数parseInt 根本不会考虑小数点,结果的类型将是一个int。

    【讨论】:

    • 你的最后一句话是指整数类型的语言吗?因为 1/3 = 0.3333333333333333 在 JavaScript 中。
    • 浮点数在再次成为整数后仍然保持浮动,我相信,除非用 Math.floor() or .ceil() 舍入。无论如何,它们都是数字类型。
    • @AlexanderO'Mara 事实证明你是对的。我误以为它以 python 的方式处理事情。
    • // 运算符?这是一条评论。
    • 啊哈哈..是的-.-。那是用python。谢谢指出
    猜你喜欢
    • 1970-01-01
    • 2019-12-18
    • 2020-12-14
    • 2021-07-13
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    相关资源
    最近更新 更多