"positive" 和 "negative" 在 ECMAScript 中是什么意思? +0 和 -0

What do "positive" and "negative" mean in ECMAScript? +0 and -0

我正在阅读 ECMAScript 5.1 spec。它说:

The slice method takes two arguments, start and end [...]. If start is negative, it is treated as length+start where length is the length of the array. If end is negative, it is treated as length+end where length is the length of the array.

"negative"是什么意思?这是有道理的,就像在数学中一样,

但是 +0-0 呢?在数学中有一个 0,它既不是正数也不是负数。我的猜测是,在 ECMAScript 中,

但我尝试将 -0slice 一起使用,浏览器将其视为非负值。

那么,+0-0 都是非正非负的吗?

一个数的正数或负数在哪里定义?我没有在 ECMAScript 规范中找到它的定义。定义是否继承自IEEE 754?

你的困惑在这部分:

But what about +0 and -0? In math there is a single 0, which is not positive nor negative. My guess was that, in ECMAScript,

  • +0 (a.k.a. positive zero) is positive.
  • -0 (a.k.a. negative zero) is negative.

+0 不是正数; -0 不是负数。从概念上讲,它们都表示数字零 或者,当发生下溢时,任何数量级太小而无法用可用的有限位数表示的数字

+0-0 的决定更多来自 IEEE 而不是 ECMA。

如果您不区分代表数学值 0 的 文字 +0-0,以及 values +0-0,分别是内存中的表示:

  1. 从 0 到最小正实数的任何数学值,可以存储在双精度 64 位数据格式中
  2. 从双精度64位数据格式可以存储的最大负实数到0的任意数学值

如果你有一个变量包含 Number 实例 -0,这可能代表实数 0(显然没有符号),或者它可能代表实数 10^ -10000。

如果你在代码中看到文字 -0+0,这将被解释为实数0,存储(就像任何足够小但实际上不是 0 的实数)如 Number -0+0,视情况而定。

以下是规范中的一些相关部分,希望能澄清一些问题:

  1. Numeric literals
  2. The Number type
  3. Algorithm conventions
  4. Why -0===+0

术语 "positive number" 和 "negative number" 确实在 ECMAScript 规范中定义:

8.5 The Number Type

The Number type has exactly 18437736874454810627 (that is, 264−253+3) values [...]

The 9007199254740990 (that is, 253−2) distinct “Not-a-Number” values of the IEEE Standard are represented in ECMAScript as a single special NaN value [...]

There are two other special values, called positive Infinity and negative Infinity [...]

The other 18437736874454810624 (that is, 264−253) values are called the finite numbers. Half of these are positive numbers and half are negative numbers; for every finite positive Number value there is a corresponding negative value having the same magnitude.

因此,

  • 由于 +0-0 是这些有限数中的两个,因此每个都必须是正数或负数。
  • 由于每个有限的正数都必须有一个负数对应,所以 +0 是正数而 -0 是负数,或者相反。
  • 如果正零是负数,负零是正数,那就太天真了。所以我们可以(大概)假设 +0 是正数,-0 是负数。

但是,根据下面,+0-0都不能为负数:

5.2 Algorithm Conventions

The mathematical function abs(x) yields the absolute value of x, which is −x if x is negative (less than zero) and otherwise is x itself.

事实上,在大多数情况下,规范似乎区分了变量为正或负的情况与变量为零的情况。例如,

5.2 Algorithm Conventions

The mathematical function sign(x) yields 1 if x is positive and −1 if x is negative. The sign function is not used in this standard for cases when x is zero.

因此,规范自相矛盾。