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
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