2

Всем доброго времени суток. Дана функция:

function compare(a, b, c) {
   return a == b && b == c && a != c;
}   

Нужно вернуть массив с набором таких параметров что бы при вызове эта функция вернула true.

compare(values[0], values[1], values[2]) === true;//OK

Пытался найти решение с помощью null, пока что без успехов

1 Answers1

5

Одним из решений может быть следующий массив

["0",0,""]

Как это работает?

При сравнении с помощью оператора == происходит приведение типов, если типы операндов отличаются. Подробнее в соответствующем ответе

Рассмотрим отдельные сравнения:

  1. "0" == 0 - по спецификации, в этом случае строка "0" будет приведена к числу, и сравнение 0==0 даст true

  2. 0=="" - по той же спецификации, пустая строка, при приведении к числу соответствует 0, следовательно опять получается 0==0

  3. "0" != "" - типы операндов одинаковые, приведение не используется, строки действительно не равны. поэтому результат true.

function compare(a, b, c) {
  return a == b && b == c && a != c;
}

var arr = ["0", 0, ""]; console.log(compare(arr[0], arr[1], arr[2]));

Grundy
  • 81,538