2014-01-31 4 views
7

Я прочитал the MDN page on the "Object.is" method. Это дает альтернативный код для браузеров, которые не обеспечивают этот метод:MDN "Object.is" альтернативное предложение

if (!Object.is) { 
    Object.is = function(v1, v2) { 
     if (v1 === 0 && v2 === 0) { 
      return 1/v1 === 1/v2; 
     } 
     if (v1 !== v1) { 
      return v2 !== v2; 
     } 
     return v1 === v2; 
    }; 
} 

Вопрос прост: когда может второй «если» быть правдой?

Благодарим за внимание.

ответ

4

Это своего рода написано в the same article:

Это также не то же самое, как равных по === оператора. Оператор === (и оператор ==) также обрабатывает значения числа -0 и +0 равным, и обрабатывает Number.NaN как не , равный NaN.

Логика в том, что NaN !== NaN это единственный случай, в котором оператор !== возвращает true на одной и той же переменной, поэтому она должна быть около NaN сравнения. Затем он выполняет ту же проверку на v2 и возвращает значение true из-за исхода: , если v2 сравнение - true, это о NaN по сравнению с NaN, поэтому возвращаем true, если нет, то возвращаем false, потому что NaN никогда не является тем же, что и 't NaN.

+0

Ну, в статье говорится, что только Number.NaN! == NaN вернет true, но не NaN! == NaN ... здесь v1 протестирован против v1 ... что означает NaN против NaN или Number.NaN против числа .NaN. Я до сих пор не понимаю ... – Clem

+2

'Number.NaN' или' NaN', не имеет значения. JavaScript имеет только один «NaN» логически. –

+1

Для наглядности NaN === NaN будет ложным. NaN - это просто псевдоним для Number.NaN – user568109

 Смежные вопросы

  • Нет связанных вопросов^_^