我正在阅读ECMAScript 5.1 spec。它说:
slice
方法有两个参数, start 和 end [...]。如果 start 为负数,则将其视为 length + start 其中 length 是数组的长度。如果 end 为负数,则将其视为 length + end ,其中length为 length 数组。
“消极”是什么意思?有道理,就像数学一样,
num > 0
,则num
为正num < 0
,则num
为否定。但是+0
和-0
呢?在数学中有一个0
,这不是正面也不是负面。我的猜测是,在ECMAScript中,
+0
(a.k.a。正零)是正面的。-0
(a.k.a.负零)是否定的。但我尝试将-0
与slice
一起使用,浏览器会将其视为非负数。
然后,+0
和-0
都是非正面和非负面的,尽管它们的名字是?
定义数字的正面或负面在哪里?我没有在ECMAScript规范中找到定义。该定义是否继承自IEEE 754?
答案 0 :(得分:3)
你的困惑在于这部分:
但是
+0
和-0
呢?在数学中有一个0
,这不是正面也不是负面。我的猜测是,在ECMAScript中,
+0
(a.k.a。正零)是正面的。-0
(a.k.a.负零)是否定的。
+0
不是正面的; -0
不是否定的。从概念上讲,它们都代表数字零,或者当发生下溢时,任何数字的数量太小而无法用可用的有限位数表示。
让+0
和-0
的决定来自IEEE,而不是来自ECMA。
答案 1 :(得分:2)
如果您不区分代表数学值0的文字 +0
和-0
以及值 +0
和-0
,分别是内存表示形式:
如果你有一个包含Number
实例-0
的变量,这可能代表实数0(显然没有符号),或者它可能代表实数10 ^ -10000 。
如果你在代码中看到文字 -0
或+0
,这将被解释为实数0,它被存储(就像任何足够小但不是实际上是0实数)作为Number
-0
或+0
,视情况而定。
以下是规范中的一些相关部分,希望澄清事情:
答案 2 :(得分:-1)
术语“正数”和“负数”确实在ECMAScript规范中定义:
数字类型恰好是18437736874454810627(即, 2 64 -2 53 +3)值[...]
9007199254740990(即2 53 -2)明显不同 IEEE标准的“非数字”值表示为 ECMAScript作为单个特殊 NaN 值[...]
还有另外两个特殊值,称为正无限和 负无穷 [...]
另一个18437736874454810624(即, 2 64 -2 53 )值称为有限数。 其中一半是正数,一半是负数 编号强>;对于每个有限正数值,有一个 具有相同幅度的相应负值。
因此,
+0
和-0
是这些有限数字中的两个,因此每个必须为正数或负数。+0
为正数,-0
为负数,或相反。+0
为正,-0
为负。但是,根据以下内容,+0
和-0
都不能为负:
数学函数 abs(x)产生 x 的绝对值, 如果 x 负(小于零),则为 -x ,否则为 -x x 本身。
事实上,在大多数情况下,当变量为正或负时,规范似乎区分了它的情况。例如,
如果 x 为正,则数学函数 sign(x)产生1 和-1如果 x 否定。当 x 零时,此标准中不使用sign函数。