Банан велик, а кожура еще больше

Много когда-то программировал на ДжаваСкрипте, поэтому многие его «особенности» просто заучил наизусть, даже не утруждая себя детальным пониманием почему и как это работает. В свою защиту хочу сказать, что многие вещи там просто «исторически сложились»

А тут братишка прислал в «Телеграм» кусок кода, который всплывает на «Стек Оверфлоу» не первый год:

console.log(0 >= null); // выведет true
console.log(0 > null || 0 == null); // выведет false

Странное поведение, как ни крути, ведь даже название операции «больше или равно» раскладывается на две — либо «больше», либо «равно». Казалось бы оба варианта должны давать одинаковый результат.

Решил я полюбопытствовать есть ли объяснение этому феномену.

Во всех браузерах работает одинаково странно, а это значит, что где-то в стандарте должно быть детально описано это поведение. И действительно, вот это место:

Let r be the result of performing abstract relational comparison lval < rval
If r is true or undefined, return false. Otherwise, return true

Что означает примерно следующее: если нам надо выполнить операцию «lval >= rval», то мы должны её преобразовать в «!(lval < rval)». То есть «0 >= null» преобразовывается в «!(0 < null)», результат операции внутри скобок — false (так как «ноль» не меньше, чем null), что после отрицания даёт нам true. Всё просто.

8 комментариев

Не вырубишь топором

Как известно, в блоки биткойна можно вложить какую угодно информацию. Вот к примеру её можно кодировать, последовательно скидывая минимальные суммы на фейковые кошельки, записывая в их номере необходимую бинарную последовательность. По этому поводу в январе писал своему другу в «Телеграм»:

Евгений спрашивает, что будет с биткоином, если злоумышленник загрузит в его блокчейн запрещённый контент с персональными данными политиков.
Уж простите за мат, но из песни слов не выкинешь, в экспрессии я его использую

А вчера он мне кинул ссылку на статью «Биткоин под угрозой полного запрета: В его блокчейне найдены образцы детской порнографии»:

Ученые из Рейнско-Вестфальского технического университета Ахена в Германии обнаружили, что блокчейн биткоина используется для хранения изображений, относящихся к разряду детской порнографии. Также в блокчейне присутствуют ссылки на изображения жестокого обращения с детьми, размещенные на других ресурсах. Это может сделать хранение биткоинов незаконным в тех странах, где детская порнография запрещена.

Мне непонятно что с такой угрозой теперь делать. Обычная практика в таких случаях — подчистки («хардфорки»), то есть отматываем историю назад и вшиваем в клиент информацию о том где у нас правда.

Но тут она вряд ли годится — раз кто-то может чистить историю, пропадает децентрализация, один из столпов блокчейна, на котором держится биткойн. За всю историю биткойна такой хардфорк был один, если мне не изменяет память, и не все любители децентрализации поступились принципами (и теперь существует два биткойна — правильный и правильнейший). Да и хлопотное это дело — историю чистить, особенно в свете того, что таких атак может быть много.

10 комментариев