JavaScript 有一个常规的 0 和一个 -0
var a = 0/-3; // -0 var b = 0*-3; // -0
对负零进行字符串转化会返回 0;
(-0).toString(); // 0 -0 + ''; // 0 String(-0); // 0 JSON.stringify(-0); // 0
有意思的是,如果反过来将其从字符串转化为数字,得到的结果是准确的:
+'-0'; // -0 Number('-0'); // -0 JSON.parse('-0'); // -0
负零转化为字符串的结果令人费解,比较操作也是如此
-0 === 0; // true 0 > -0; // false
抛开学术上的繁枝褥节,我们为什么需要负零呢?
有些应用程序中的数据需要以级数形式来表示(比如动画帧的移动速度),数字的符号位用来代表其他信息(比如移动的方向)。此时如果一个值为 0 的变量失去了它的符号位,它的方向信息就会丢失。所以保留 0 的符号位可以防止这类事情发生