关键要点
- JavaScript 中所有数字都使用 Number 数据类型表示,包括整数、实数、十六进制数和科学计数法表示的数字。但是,JavaScript 在内部将所有数字表示为 IEEE 754 浮点数,这意味着 JavaScript 数学运算并非 100% 精确。
- JavaScript 定义了一个名为 Not-a-Number (NaN) 的数字,用于将非数字表示为数字。NaN 是 JavaScript 中唯一一个不等于自身的数值,可以使用 isNaN() 函数进行测试。
- JavaScript 有一些特性,例如带符号的零,导致出现正零 ( 0) 和负零 (-0),它们被认为是不同的值,但 JavaScript 的比较运算符无法区分它们。在 JavaScript 中,除以零会产生 Infinity,而除以负零会产生 -Infinity。
数据类型是每种编程语言的重要组成部分,而数字也许是最重要的数据类型。毕竟,计算机实际上只是昂贵的计算器。像任何有价值的编程语言一样,JavaScript 支持数值数据。但是,与 JavaScript 的许多其他方面一样,数字也有一些细微之处,如果您不小心,可能会给您带来麻烦。本文探讨了数值数据及其一些特性。注意:在阅读本文之前,您应该对 JavaScript 数据类型有基本的了解。
Number 类型
在 JavaScript 中,所有数字都使用 Number 数据类型表示。这包括整数、实数、十六进制数和科学计数法表示的数字。以下示例通过将 typeof 运算符应用于各种数字来验证这一点。此示例中 typeof 的每次应用都返回 number。
typeof(100); typeof(3.14); typeof(0xDEADBEEF); typeof(7.89e2);
在前面的示例中,数字采用了各种格式。但是,在内部,所有 JavaScript 数字实际上都表示为 IEEE 754 浮点数。这很重要,因为它意味着 JavaScript 没有整数的概念,尽管该语言有 parseInt() 函数。这也意味着 JavaScript 数学运算并非 100% 精确。例如,考虑以下表达式。
(0.1 + 0.2) === 0.3
如果您不熟悉浮点数,您肯定期望此表达式计算结果为 true。毕竟,0.1 0.2 等于 0.3。但是,由于浮点数的工作方式,其和实际上是 0.30000000000000004。差异很小,但这足以导致整个表达式的计算结果为 false。
正零和负零
IEEE 754 标准的另一个特性是带符号的零。这导致出现两个零——正零, 0,和负零,-0。这可能看起来很奇怪,但乐趣才刚刚开始。显然,这两个是不同的值,否则就只有一个零了。但是,如果您显示这两个零中的任何一个,符号都会被删除。例如,以下代码尝试并排显示这两个零值。
typeof(100); typeof(3.14); typeof(0xDEADBEEF); typeof(7.89e2);
更糟糕的是,JavaScript 的比较运算符似乎也无法区分这两个值,如下例所示。
(0.1 + 0.2) === 0.3
这个问题有一个相当简单的解决方法。在 JavaScript 中,除以零会产生 Infinity。同样,除以负零会产生 -Infinity。因此,要确定一个数字是否等于 -0,我们必须检查它是否为零,然后使用它作为分母进行除法,并检查 -Infinity,如下所示。
alert((+0) + " " + (-0)); // 显示 0 0
Not-a-Number (NaN)
JavaScript 实际上定义了一个名为 Not-a-Number (NaN) 的数字。NaN 是一个虚假的值,用于将非数字表示为数字。这个值很有趣,因为它的名称本身就排除了它是数字的可能性,但是 typeof(NaN) 是 number。NaN 也很有趣,因为它是在 JavaScript 中唯一一个不等于自身的数值。例如,以下代码将返回 false。
alert((+0 === -0)); // 显示 true alert((-0 === +0)); // 显示 true
您可以使用 isNaN() 函数测试 NaN,而不是使用比较运算符,如下所示。
function isNegativeZero(x) { return (x === 0 && (1/x) === -Infinity); }
但是,isNaN() 也很有趣,因为它可能会产生误导。如果您传入一个可以强制转换为数字的值,isNaN() 将返回 false。在以下示例中,isNaN() 使用几个明显不是数字的值进行调用。但是,每次调用都返回 false。
alert((NaN === NaN)); // 显示 false
检查 NaN 的更好方法是利用它不等于自身这一事实。以下函数使用严格不等式测试 NaN。此函数仅对值 NaN 返回 true。
isNaN(1); // 返回 false isNaN(NaN); // 返回 true
其他有趣的时刻
还有一些其他情况可能会导致数字出现问题。首先,您应该注意旧的浏览器,它们允许将 Infinity、NaN 和 undefined 等全局属性重新定义为新值。例如,如果经常使用 NaN,以下代码可能会产生很多问题。幸运的是,现代浏览器会忽略对前面提到的属性的赋值。严格模式更进一步,将这些静默故障转换为错误。
isNaN(true); isNaN(false); isNaN(""); isNaN(null); // 全部返回 false
另一个有趣的诊断错误来自添加数字和字符串。如下所示是一个示例。在这种情况下,字符串连接会覆盖加法。这会导致 foo 被转换为字符串“100”。最终结果是字符串“1001”,这与预期的值 101 大相径庭。这种类型的错误比您想象的更常见,并且往往在读取用户输入时发生。
function isNotANumber(x) { return x !== x; }
结论
本文探讨了 JavaScript 中数字的一些特性。希望您现在了解这些问题是如何产生的,以及如何避免它们。而且,尽管您可能不会经常遇到像负零这样的情况,但至少现在您已经做好了准备。
关于 JavaScript 数字的常见问题 (FAQ)
在 JavaScript 中,将数字除以零会发生什么?
在 JavaScript 中,当您将数字除以零时,结果是 Infinity。这是因为任何数字除以零在数学上都是未定义的,但 JavaScript 出于实际目的将其表示为 Infinity。但是,如果您将零除以零,则结果为 NaN (Not a Number),因为此运算在数学中是不确定的。
JavaScript 如何处理 BigInt 除以零?
BigInt 是 JavaScript 中的一个内置对象,它提供了一种表示大于 2^53-1 的整数的方法,这是 JavaScript 可以使用 Number 原语可靠地表示的最大数字。如果您尝试将 BigInt 除以零,JavaScript 将抛出 RangeError,指示该操作无效。
如何在 JavaScript 中防止或处理除以零错误?
您可以在 JavaScript 中使用条件语句在执行除法运算之前检查分母是否为零来防止或处理除以零错误。如果分母为零,您可以决定如何处理它,例如,返回特定值或显示错误消息。
为什么 JavaScript 中 0 除以 0 为 NaN?
在数学中,表达式 0/0 是未定义的,因为它没有明确的、确定的值。在 JavaScript 中,未定义的数学运算会导致 NaN (Not a Number)。因此,当您在 JavaScript 中将零除以零时,结果为 NaN。
JavaScript 中 NaN 和 Infinity 有什么区别?
在 JavaScript 中,NaN (Not a Number) 和 Infinity 是特殊的数值。NaN 表示不是合法数字的值,通常是由于未定义或不确定的数学运算造成的。另一方面,Infinity 表示大于任何可能数字的数字,通常是由于将数字除以零造成的。
如何检查 JavaScript 中的结果是否为 NaN?
您可以使用 JavaScript 中的 isNaN() 函数来检查结果是否为 NaN。如果参数为 NaN,此函数返回 true,否则返回 false。
如何检查 JavaScript 中的结果是否为 Infinity?
您可以使用 JavaScript 中的 isFinite() 函数来检查结果是否为有限数字。如果参数为正无穷大或负无穷大,此函数返回 false,否则返回 true。
JavaScript 中 Number 原语有什么意义?
JavaScript 中的 Number 原语用于表示数值。它可以表示整数值以及浮点数。但是,它只能可靠地表示最多 2^53-1 的数字。
如何在 JavaScript 中处理大数字?
为了处理超过 JavaScript 安全整数限制的大数字,您可以使用 BigInt 对象。BigInt 允许您表示大于 2^53-1 的整数。
JavaScript 中的 RangeError 是什么?
当值不在预期范围内时,JavaScript 会抛出 RangeError。例如,尝试将 BigInt 除以零会导致 RangeError。
以上是JavaScript号码的乐趣的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr

Node.js擅长于高效I/O,这在很大程度上要归功于流。 流媒体汇总处理数据,避免内存过载 - 大型文件,网络任务和实时应用程序的理想。将流与打字稿的类型安全结合起来创建POWE

Python和JavaScript在性能和效率方面的差异主要体现在:1)Python作为解释型语言,运行速度较慢,但开发效率高,适合快速原型开发;2)JavaScript在浏览器中受限于单线程,但在Node.js中可利用多线程和异步I/O提升性能,两者在实际项目中各有优势。

JavaScript起源于1995年,由布兰登·艾克创造,实现语言为C语言。1.C语言为JavaScript提供了高性能和系统级编程能力。2.JavaScript的内存管理和性能优化依赖于C语言。3.C语言的跨平台特性帮助JavaScript在不同操作系统上高效运行。

JavaScript在浏览器和Node.js环境中运行,依赖JavaScript引擎解析和执行代码。1)解析阶段生成抽象语法树(AST);2)编译阶段将AST转换为字节码或机器码;3)执行阶段执行编译后的代码。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

禅工作室 13.0.1
功能强大的PHP集成开发环境

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能