Javascript。将-0正确转换为字符串

Javascript. Correctly convert -0 to a string

x = -0
>> -0
typeof(x)
>> "number"
x.toString()
>> "0"
console.log(x)
>> -0

如何将 Javascript 的 -0(设置符号位而不是清除的数字零)转换为两个字符串(“-0”),方法与 console.log 在显示之前呢?

这个怎么样(借用here的想法):

[-0, 0].forEach(function(x){
    console.log(x, x === 0 && 1/x === -Infinity ? "-0" : "0");
});

如果 Node.js(或 npm available¹)util.inspect 会这样做:

> util.inspect(-0)
'-0'

如果没有,可以做一个函数:

const numberToString = x =>
    Object.is(x, -0) ?
        '-0' :
        String(x);

如果没有 Object.is,请将条件替换为 x === 0 && 1 / x === -Infinity

¹ 我还没有读过这个包的源码,以后可能会更新;安装前先看看!

As per specification, -0 是唯一一个 Number(String(x)) 不生成 x.

原始值的数字

可悲的是,所有标准 toString 方法告诉 -0 就像 0 一样。哪个转换为字符串 '0' 而不是 '-0'.

您可能对 Firefox 上的功能 uneval 感兴趣。但由于其仅适用于 Firefox,非标准功能。您应该避免在网站上使用它。 (另外,请永远不要 eval(uneval(x)) 作为深度克隆)

也许您必须使用自己的代码来执行此操作:

function numberToString(x) {
  if (1 / x === -Infinity && x === 0) return '-0';
  return '' + x;
}

所以我们不能简单地得到 -0 的符号吗?它是唯一的,如果符号是 -0,我们可以将“-”附加到 zero.Any thoughts