Я подумал, что ничто не мешает коду хранить NaN-значение, отличное от глобального NaN
в переменной. Тем не менее, я быстро почувствовал, что это зависит от браузера. Хранение такого значения в переменной прекрасно работало в Chrome (Версия 67.0.3396.99 (Официальная сборка) (64-разрядная версия)), в отличие от Firefox (61.0.1 (64-разрядная версия)).
Поведение относительно этого не ясно из спецификации, или FF не полностью следует этому здесь? Почему FF преобразует число в значение глобального NaN
?
Вот соответствующий фрагмент для тестирования:
let buffer = new ArrayBuffer(8);
let float = new Float64Array(buffer);
let bytes = new Uint8Array(buffer);
float[0] = NaN
bytes[0] = 1;
let differentNaN = float[0];
float[0] = differentNaN;
console.log(`We are ${bytes[0] === 0 ? "not" : "potentially"} on chrome!`);