ECMAScript中"正面"和"负面"是什么意思?+0和-0

Ori*_*iol 7 javascript specifications language-lawyer

我正在阅读ECMAScript 5.1规范.它说:

slice方法有两个参数,startend [...].如果start为负,则将其视为 length + start,其中length是数组的长度.如果end为负,则将其视为length + end,其中length是 数组的长度.

"消极"是什么意思?有道理,像数学一样,

  • 如果num > 0,那么num它是积极的
  • 如果num < 0,那么num是否定的.

但是,我们+0-0?在数学中有一个单一的0,不是积极的,也不是消极的.我的猜测是,在ECMAScript中,

  • +0 (又称正零)是积极的.
  • -0 (又称负零)是否定的.

但是我试着用-0slice,和浏览器把它当作非负.

然后,都是+0-0非正非负,尽管他们的名字?

定义数字的正面或负面在哪里?我没有在ECMAScript规范中找到定义.该定义是否继承自IEEE 754?

Ori*_*iol 0

术语“正数”和“负数”确实在 ECMAScript 规范中定义:

\n\n
\n

8.5 数字类型

\n\n

Number 类型正好有 18437736874454810627 (即\n 2 64 \xe2\x88\x922 53 +3)值[...]

\n\n

IEEE 标准的9007199254740990 (即 2 53 \xe2\x88\x922)不同\n \xe2\x80\x9cNot-a-Number\xe2\x80\x9d 值在 ECMAScript 中表示为单个特殊NaN价值 [...]

\n\n

还有另外两个特殊值,称为正无穷大和负 无穷大[...]

\n\n

其他 18437736874454810624 (即\n 2 64 \xe2\x88\x922 53)值称为有限数。\n 其中一半是正数,一半是负数;对于每个有限的正数值,都有一个具有相同大小的相应负值。

\n
\n\n

所以,

\n\n
    \n
  • 由于+0-0是这些有限数中的两个,因此每个数必须为正数或负数。
  • \n
  • 由于每个有限正数必须有一个负数对应,要么+0是正数,要么-0是负数,要么相反。
  • \n
  • 如果正零是负数,负零是正数,那就太可笑了。所以我们(可能)可以假设+0是正数,-0是负数。
  • \n
\n\n

然而,根据以下内容,+0既不-0不能为负数:

\n\n
\n

5.2 算法约定

\n\n

数学函数abs(x)产生x的绝对值,如果x负(小于零) ,则为\xe2\x88\x92x,否则为 x本身。

\n
\n\n

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

\n\n
\n

5.2 算法约定

\n\n

如果x为\n,则数学函数Sign(x)生成 1;如果 \n x,则数学函数 Sign(x)生成\xe2\x88\x921 。对于x为零的情况,本标准中不使用符号函数。

\n
\n\n

因此,该规范是矛盾的。

\n