javascript - Varför är Date.now() | 0 inte samma som Date.now()


Heltal Number | 0 kommer att vara samma som källnummer

Men varför är Date.now() | 0 inte samma som Date.now()

let t = Date.now()
console.log((t | 0) === t)

Svar #1

Bitvisa operatorer arbetar på bitar som representeras av 32 nollor och/eller ettor. Om talet som opereras på ligger utanför detta intervall, kommer resultatet sannolikt att vara ologiskt.

För bitvis ELLER nås denna gräns när talet är 2 ** 31 - 1:

const test = num => console.log((num | 0) === num);
test(2 ** 31 - 1)
test(2 ** 31)
test(2 ** 31 + 1)

Date.now returnerar antalet millisekunder mellan epoken och nu, vilket är ett stort tal (1583486012561 eller där omkring), mycket större än övre gränsen på 2147483647.