Парадокс в JavaScript с точки зрения PHP-кодера

console.log(2 == true); // false
console.log(2 ? true : false); // true

Почему так? :)
  • Вопрос задан
  • 3121 просмотр
Решения вопроса 1
avalak
@avalak
JavaScript Garden: Равенство и сравнение

Слабая типизированность языка JavaScript подразумевает приведение обеих переменных к одному типу для того, чтобы произвести сравнение.

console.log(2 == true); // false. int boolean
console.log(!!2 == true); // true. boolean boolean
console.log(2 ? true : false); // true. boolean
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
xel
@xel
front end developer
Это ещё что.
console.log(112233445566778899 === 112233445566778900); // true

В PHP правда будет то же самое.
По сути видно, что 2 «не равно» ни true, ни false; зато 1 равно true.
От чего напрашивается вывод что при сравнении именно boolean приводится к целому.
Ответ написан
Комментировать
@rowdyro
Могу ошибаться, но походу при операции сравнения оба операнда приводятся к типу левостоящего, видимо true приводится к 1: соответственно 2 == 1 = FALSE
Ответ написан
SowingSadness
@SowingSadness
web-разработчик
Я вас удивлю, но происходит это так:
Number(2) == Number(true)
Ответ написан
@Silver_Clash
Из книги, Дэвид Флэнаган. JavaScript. Подробное руководство. 5-е издание:
Эти операторы (<,>) позволяют сравнивать операнды любого типа. Однако сравнение может выполняться только для чисел и строк, поэтому операнды, не являющиеся числами или строками, преобразуются.
Ответ написан
andreysmind
@andreysmind
а это не жаваскрипт, это почти везде так.
перед знаком вопроса находится выражение, которое проверяется на истинность.
в случае если вместо 2, будет 0 — результат будет более другим.
Ответ написан
Goder
@Goder
Просто никогда не используйте ==, и вам не придется учить все эти безумные правила приведения.
Можно, наверное, использовать == вместо === для сравнения «123» == new String(«123»), но, на мой взгляд, проще написать Equals метод и забыть про кошмары ==. :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы