ECMA-262 9 ª edición, junio de 2018, (la norma a la que se destina JavaScript para ajustarse) dice, en 6.1.6 “el tipo de número”:
... los 9007199254740990 (es decir, 2 53 -2) valores distintos de "No un número" del Estándar IEEE están representados en ECMAScript como un único valor especial de NaN ... En algunas implementaciones, el código externo puede detectar una diferencia entre varios valores No-a-Number, pero dicho comportamiento depende de la implementación; para el código ECMAScript, todos los valores de NaN son indistinguibles entre sí.
24.1.17 "NumberToRawBytes (tipo, valor, isLittleEndian)" dice:
... Si el valor es NaN, rawBytes se puede establecer en cualquier implementación elegida en formato IEEE 754-2008 binary64 codificación Not-a-Number. Una implementación siempre debe elegir la misma codificación para cada valor de NaN distinguible de implementación ...
No veo ningún otro pasaje que mencione NaN que sea esclarecedor sobre esta pregunta. Por un lado, 24.1.17 efectivamente nos dice que los bits de un NaN se deben preservar al convertir el NaN en bytes sin formato. Sin embargo, nada más parece decirnos que los bits deben preservarse en otras operaciones. Se podría deducir que esta es la intención, porque este requisito en 24.1.17 no serviría de nada si los bits pudieran ser cambiados arbitrariamente por cualquier otra operación. Pero no confiaría en las implementaciones de JavaScript para implementar esto de conformidad con esa intención.