2012-06-14 13 views

Odpowiedz

7

Według ES5 spec, gdy robi bitwise operations wszystkie argumenty są konwertowane na ToInt32 (który najpierw wywołuje ToNumber. Jeśli wartość jest NaN lub Infinity, to przekształca się 0).

sposób: NaN^1 =>0 XOR 1 =>1

+1

Ci Spec ..... +1 A ja myślałem, że to 'funkcja bitowe (obj) { if (typeof o == "Number"!) Return 1; } ' – gdoron

+0

@gdoron: Muszę pokochać specyfikację :-P –

+1

Jeśli dadzą mi swój przedstawiciel, zrobię to. ':)' Warto wspomnieć, że wynik zależy od drugiego operandu. Przykład: '" A "^ 2 === 2 // prawda' – gdoron

2

ECMA-262 określa w 11.10 że argumenty dwuskładnikowych operatorów bitowe są przekształcane w ToInt32. I 9.5, który wyjaśnia ToInt32 mówi w swoich pierwszych dwóch punktach:

  1. liczba Pozwolić być wynikiem nazywając ToNumber na argumencie wejściowym.
  2. Jeśli liczba to NaN, +0, -0, + Inf, lub -Inf, return +0.
Powiązane problemy