Is there or isn't there an integer type in JavaScript?
我刚开始学习javascript,马上就被Mozilla的重新介绍javascript(JS教程)中看似矛盾的语句弄糊涂了。
11手:
"There's no such thing as an integer in JavaScript, so you have to
be a little careful with your arithmetic if you're used to math in C
or Java."
另一方面(在该段之后):
"In practice, integer values are treated as 32-bit ints (and are
stored that way in some browser implementations), which can be
important for bit-wise operations."
和
"You can convert a string to an integer using the built-in parseInt()
function."
那么,在javascript中是否存在整数之类的东西?
- 是的,有整数值,但没有整数类型,只有数字。实现细节(例如它们的存储方式)不是语言规范的一部分。
- @罗布你简洁的回答是充分和彻底清除我的困惑。请把它作为答案寄出去,这样我可以接受。非常感谢你。
- @robg它确实是规范的一部分:"对应于双精度64位二进制格式ieee 754-2008值的原语值"
- 当对数字执行逐位运算时,它会变得特别。
- @robg请将您的评论作为答案(对ieee754进行微小修正),因为当前提供的答案很糟糕。谢谢:
- @zerkms:您在其中一个(显然已删除)答案中写下,像in t这样的类型并没有精确地定义为javascript。我想知道当时的int、boolean等关键字是什么。那么typeof呢?
- @aimanal eryani它们不是保留的ecma international.org/ecma-262/6.0/index.html sec关键字
- @Zerkms&aimanal-Eryani以前通过ES3进行预订,但现在不再是了。
- @他们是废弃的ES4草案的一部分。
- @Zerkms和Alexandero'Mara注意到,谢谢!
JS中只有表示数字的数字数据类型。
内部实现为IEEE754双精度浮点数。
它的意思是-技术上没有表示整数的专用数据类型。
实际上,这意味着我们只能安全地使用根据上述标准安全表示的数字。它包括范围内的整数值:[-9007199254740991; 9007199254740991]。这两个值都被定义为常量:对应的Number.MIN_SAFE_INTEGER和Number.MAX_SAFE_INTEGER。
- 真的。没有整数类型的编程语言。
- 除了数字的范围之外,每个人都应该考虑浮点的特殊值,比如无穷大(JS中没有被零除),-无穷大、NaN甚至-0(与零不同!).
我应该提到,实际上有一个名为BigInt的类型,它表示一个真正的整数。
但是,因为它不能与Number一起使用,而且通常只适用于较大的数字,所以我不建议这样做。
不过我觉得值得一提。
There is no such thing as a purely integer variable in JavaScript.
而不是为什么在javascript中使用parseInt()或int值,因为我们需要int值来确保复杂的数学表达式返回无错误的结果。
这里有一点可能对理解javascript中的整数很有帮助,第一点是国王。
在javascript中,整数只意味着数字没有小数部分。
整数是不包含小数部分的数字。
整数是可以是正的或负的数字。
整数是可以在javascript中格式化为十进制、八进制或十六进制的数字。
十进制整数由0到9之间的数字组成,不能以前导零开头。
八进制整数,也称为base-8,必须以前导零开始。前导零后面的每个数字可以是0到7。
十六进制整数,也称为base-16,必须以0x或0x开头。前导零后面的每个数字可以是0到15,但10到15由字母a(或a)到f(或f)表示。
来源
javascript中的整数是什么?
国王点
所有其他点
- 所以您只需复制粘贴的wbex.ru/index.php?title=javascript_tutorial/number_data_type‌&8203;/…?
- 我当然希望那些投了你反对票的人不会这么做,因为你从他们"发现"的来源那里得到了你的答案,但是你的答案有一个真正的缺陷,我希望他们会提到。
- 我已经知道答案了,但最难让提问者理解它是如何工作的,这需要源代码和事实,如果提问者陷入编程循环或其他逻辑问题,而不是谁需要谷歌来搜索,我强烈相信保持简单,因为大多数人对javascript感到困惑
- @是我投了反对票。我这样做是因为这个问题意味着一个基于标准的答案,而不是使用小学级别的整数定义。换句话说,这个答案不包含技术事实,只包含模糊和混乱的陈述。我个人认为这个答案是有害的,因为它是基于猜测和感情而不是事实。如果您再次检查它,您会发现它甚至没有问题的答案:如果JS甚至有整数。
- @如果你仍然不同意我的观点,请给我指出这个答案中的任何东西,它能可靠地回答"所以……在javascript中是否有整数之类的东西?.
- @Shailendrasharma 9999999999999999999999999999999999999999999999999999999999999999999999999999999999这绝对是一个整数,它满足您列举的所有"要求"。但它在JS中不起作用。当简单化是完全错误的时候,是否足以证明"保持简单"是没有意义的?
- @我只是回答"所以…在javascript中是否有整数之类的东西?是的,它是存在的,但不是以数据类型的形式存在,是的,你可能在javascript中做了很多工作,这就是为什么你要指出范围,我知道你的答案包括高级级别的事情,但它们都从基本形式开始,但为什么你认为我的问题值得投票否决?
- 因为这是基于感觉。"在javascript中,整数只意味着数字没有小数部分"——这一项和其他项可以应用于每种编程语言。在每种编程语言中,整数没有小数部分。在每种语言中,它都包含0-9位数字(但这是不正确的)。它是对整数的定义,完全没有JS的细节。
- @zerkms您仍然缺少流,首先我提到的是在javascript中没有纯整数变量。你能详细说明一下如何把它应用到每种编程语言吗
- 我恢复投反对票,但我仍然觉得这个答案没用。整个内容解释了(错误的)每个人在小学教的东西。
- @谢谢你,我同意我的回答对你没用,但对新的豆子可能有用。
- @这对新手尤其有害:"十进制整数由0到9之间的数字组成,不能以前导零开头。"——这是完全错误的。你所说的只是一种表示,可以包括字母和分数。例如:1.23e5。
- @ KekMMS没有错,因为如果一个数字以"0"开头,它在JavaScript或Java中被当作基数8(八进制),我不是在说"字母和分数",我写的数字不包含小数部分,为什么要讨论字母和分数。
- @因为1.23e5是一个整数。
- @Shailendrasharma,因为你解释为"八进制"的东西从来不是ES规范的一部分,现在已经被明确地否决了。
- @Shailendrasharma是因为有0b1111也是整数。
- 总而言之:你的清单和ES标准没有任何关系,它是误导性的和不正确的。
- "因为如果一个数字以"0"开头,它在javascript中被视为以8(八进制)为基数"——这不是很长的情况(根据标准)。你真的没有看到你甚至没有试着去依赖标准,只是分散你自己的假设吗?
- 1.23e5和0b1111是javascript中的指数,如果它们在javascript中是整数,我会很兴奋地看到一些源代码,"因为如果一个数字以‘0’开头,它在javascript中被视为基数8(八进制)"是的,它们称为八进制整数,因为您再次错过前面的行整数是可以格式化为javascript中的十进制、八进制或十六进制。
- 泽克斯已经澄清了他的理由。在一些口译员看来,前导0并不意味着一个八进制。我刚在火狐的控制台上试过,它是以10个数字为基数来处理它们的。不管怎样,我只是认为,如果海报不明白他做错了什么,一个负面的东西就不能达到预期的目的。
- @Aimanal Eryani同意,因为Ecmascript 5删除了八进制解释源
啊,是的,这会让人很困惑。在JavaScript中,变量的类型是隐式定义的。
函数parseInt不考虑小数点,结果类型为int。
- 最后一句是指整数类型的语言吗?因为1/3 = 0.3333333333333333在javascript中。
- 我相信,浮点数在再次变为整数后仍保持浮动,除非用Math.floor() or .ceil()四舍五入。无论如何,它们都是数字类型。
- @亚历山德罗·玛拉证明你是对的。我误以为它是用Python的方式处理事情的。
- //操作员?这是一个评论。
- Ahaha…是的。-那是关于Python的。谢谢你的指点