在JavaScript中其實存在兩種零,+0
與-0
,它們主要是符號位不相等一個為正,一個為負。在運算中它們也有很多不一樣的地方。
那麼我們如何得到+0
與-0
呢?
0 * -1 // 0
0 * -1 // -0
複製程式碼
可以看到0和負數進行運算時,我們就可以得到-0
。
-0
在加減運算中不會有什麼影響,但是在一些運算中就會影響我們的結果:
1/0 // Infinity
1/-0 // -Infinity
1/0 === -1/0 // false
複製程式碼
我們對1分別除以+0
和-0
時會得到+Infinity
和-Infinity
,並且它們並不相等。
但是在將+0
和-0
做字串轉換時我們會得到一樣的結果:
var a = -0
var b = +0
a.toString() // 0
b.toString() // 0
JSON.stringify(a) // 0
JSON.stringify(b) // 0
複製程式碼
在轉換成字串的過程中我們得到的都是字串0
,但是反過來我們又可以得到準確的結果:
Number.parseInt('-0') // -0
JSON.parse("-0") // -0
複製程式碼
直接比較+0
與-0
我們也無法得到正確的結果:
0 === -0 // true
複製程式碼
一般我們有兩種方法進行比較,一種就是利用 +Infinity
和-Infinity
不相等的特點
function compareZero(v1,v2){
if(v1===0&&v2===0){
return 1/v1 === 1/v2
}
}
複製程式碼
另一種是直接使用Object.is
來進行判斷:
Object.is(0,-0) // false
複製程式碼
當然+0
與-0
的存在也不是完全沒有用處,我們有時會用符號位儲存一些資訊,比較向量或速度的方向資訊,如速度-0
,負號代表著運動的方向,保留了負號位可以防止這些資訊的丟失。