Javascript “你做什么?”;“积极的”;及;“否定”;在ECMAScript中是什么意思+;0和-0
我在看报纸。它说:Javascript “你做什么?”;“积极的”;及;“否定”;在ECMAScript中是什么意思+;0和-0,javascript,language-lawyer,specifications,Javascript,Language Lawyer,Specifications,我在看报纸。它说: slice方法接受两个参数,start和end[…]。如果start为负值,则将其视为 长度+开始,其中长度是数组的长度。如果end为负值,则将其视为长度+end,其中长度为长度 数组的一部分 “消极”是什么意思?这是有道理的,就像数学一样 如果num>0,则num为正 如果num
slice
方法接受两个参数,start和end[…]。如果start为负值,则将其视为
长度+开始,其中长度是数组的长度。如果end为负值,则将其视为长度+end,其中长度为长度
数组的一部分
“消极”是什么意思?这是有道理的,就像数学一样
- 如果
,则num>0
为正num
- 如果
,则num<0
为负值num
+0
和-0
呢?数学中只有一个0
,它既不是正的,也不是负的。我猜,在ECMAScript中
(也称为正零)为正+0
(也称为负零)为负-0
-0
与切片一起使用,浏览器将其视为非负面
那么,+0
和-0
是否都是非正面和非负面的,不管它们的名字是什么
一个数字的正性或负性在哪里定义?我没有发现ECMAScript规范中的定义。定义是否继承自IEEE 754?您的困惑在于这一部分:
但是+0
和-0
呢?数学中只有一个0
,它既不是正的,也不是负的。我猜,在ECMAScript中
+0
(也称为正零)为正
-0
(也称为负零)为负
+0
不是正数<代码>-0
不是负数。从概念上讲,它们都表示数字零,或者,当发生下溢时,表示任何大小太小而无法用有限数量的可用位表示的数字
拥有
+0
和-0
的决定更多地来自IEEE而不是ECMA。如果不区分表示数学值0的文本+0
和-0
,以及表示内存中的值+0
和-0
,事情可能会变得混乱,分别为:
Number
实例-0
的变量,那么它可能表示实数0(显然没有符号),也可能表示实数10^-10000
如果您在代码中看到文字-0
或+0
,这将被解释为实数0,它被存储为数字-0
或+0
,视情况而定(就像任何足够小但实际上不是0的实数)
以下是规范中的一些相关章节,希望能澄清一些问题:
ECMAScript规范中确实定义了术语“正数”和“负数”:
数字类型正好是18437736874454810627(即,
264−253+3)值[…]
9007199254740990(即253−2) 明显的
IEEE标准的“非数字”值表示为
ECMAScript作为单个特殊NaN值[…]
还有两个特殊值,称为正无穷大和
负无穷[…]
其他18437736874454810624(即,
264−253)值称为有限数。
其中一半是正数,一半是负数
数字;对于每个有限的正数值,都有一个
具有相同大小的相应负值
所以,
- 由于
+0
和-0
是这两个有限数中的两个,因此每个数必须是正数或负数
- 由于每个有限正数必须有一个负的对应项,
+0
为正,-0
为负,或者相反
- 如果正零是一个负数,而负零是一个正数,那就太过分了。所以我们可以(可能)假设
+0
为正,-0
为负
但是,根据以下内容,+0
和-0
都不能为负:
数学函数abs(x)得出x的绝对值,
那是−如果x为负(小于零)则为x,否则为
x本身
事实上,在大多数情况下,规范似乎能够区分变量为正或负的情况与变量为零的情况。比如说,
如果x为正,则数学函数符号(x)产生1
及−1如果
x为负。在本标准中,符号函数不用于x为零的情况
因此,规范是矛盾的。有趣的是,Math.abs(-0)==-0
是正确的(在Chrome中)。@ssube0==-0
@ssube是,0===-0
。不能区分它们。做在ECMAScript 6中,Object.is(0,-0)
isfalse
。相关:一个有趣的问题。我想在这种情况下,负值
被视为“小于零”
。但是对于-0*0
(以及类似的算术运算),很明显符号确实很重要。)那么,ECMAScript数的正性或负性是否定义为其数学值的正性或负性?因此,由于+0
和-0
的值都是0,它们既不是正的也不是负的?@Oriol:引用部分的正下方使用了注释“…如果x是n