ECMA-262 9 ª Edição, Junho de 2018, (o padrão ao qual se destina o JavaScript para conformar) diz, em 6.1.6 “o tipo de número”:
… Os valores 9007199254740990 (isto é, 2 53 -2) distintos “Não é um número” do Padrão IEEE são representados no ECMAScript como um único valor NaN especial.… Em algumas implementações, o código externo pode detectar uma diferença entre vários valores que não são um número, mas esse comportamento depende da implementação; para o código ECMAScript, todos os valores de NaN são indistinguíveis um do outro.
24.1.17 "NumberToRawBytes (tipo, valor, isLittleEndian)" diz:
… Se o valor for NaN, rawBytes pode ser configurado para qualquer implementação escolhida, codificação IEEE 754-2008 no formato binary64 Não-numérico. Uma implementação deve sempre escolher a mesma codificação para cada valor distinguível de NaN.…
Não vejo nenhuma outra passagem que mencione NaN que esteja esclarecendo essa questão. Por um lado, 24.1.17 nos diz efetivamente que os bits de um NaN devem ser preservados ao converter o NaN em bytes brutos. No entanto, nada mais parece nos dizer que os bits devem ser preservados em outras operações. Pode-se deduzir que essa é a intenção, porque esse requisito em 24.1.17 não serviria para nada se os bits pudessem ser arbitrariamente alterados por qualquer outra operação. Mas eu não confiaria nas implementações de JavaScript para implementá-las em conformidade com essa intenção.