2012-06-14 5 views

risposta

7

Secondo la ES5 spec, quando si fa bitwise operations, tutti gli operandi vengono convertiti ToInt32 (che innanzitutto chiama ToNumber. Se il valore è NaN o Infinity, è convertito in 0).

Così: NaN^1 =>0 XOR 1 =>1

+1

Coloro spec ..... +1 e ho pensato che è 'funzione di bit a bit (obj) { if (typeof o == "Numero"!) Return 1; } ' – gdoron

+0

@gdoron: devo amare le specifiche :-P –

+1

Se mi daranno il tuo rappresentante, lo farò. ':)' Vale la pena ricordare che il risultato dipende dal secondo operando. Esempio: '" A "^ 2 === 2 // true' – gdoron

2

ECMA-262 definisce in 11.10 che gli argomenti degli operatori bit binari vengono convertiti con ToInt32. E 9.5 che spiega ToInt32 dice nei suoi primi due punti:

  1. numero Lasciate Essere il risultato della chiamata ToNumber sull'argomento ingresso.
  2. Se il numero è NaN, +0, -0, + Inf o -Inf, restituire +0.