какай-то сложный юмор. я пойду
Как я понял, он спросил равен ли Нулл нулю. Джава скрипт ответил что нет. Тогда он спросил меньше ли Нулл нуля. ЖС ответил что нет. И когда тот уже решил что нулл больше нуля, он спросил меньше либо равен нулл, и ЖС ответил что да, противореча себе до этого.
А потом все удивляются "С фига оно не работает, всё же верно написано".
Если ты пишешь что-то хоть сколько-нибудь серьёзное, то должен быть в курсе таких фишек языка, а лучше если ещё и понимаешь, почему они так работают. Если же ты только встаёшь на путь познания языка, то не будешь утверждать, что "все верно написано", а пойдешь курить маны.
А если ты говнокодишь за бутеры, вряд ли тебя будет волновать такая мелочь, как не всегда верно работающий код.
А если ты говнокодишь за бутеры, вряд ли тебя будет волновать такая мелочь, как не всегда верно работающий код.
К языкам и библиотекам часто нет нормальной документации, описывающие такие "фишки". Особенно если они недавно появились.
юмор простой, а интерпретатор сложный
Твою ж мать. Joy нашел у меня баг в коде.
а если так?
false
false
huels
Иисус не шарит в программировании
ложное утверждение или ложное утверждение, интересно, что же будет (хотя, судя по примеру выше, правильный ответ - все, что угодно)
А вот если так:
null * 1 == 0
То результат true
AjiTae ниже объяснил почему так.
null * 1 == 0
То результат true
AjiTae ниже объяснил почему так.
Соответственно null + 0 == 0 дает true
А null + 0 == null дает false
Все логично
А null + 0 == null дает false
Все логично
Мне интересно только одно, как сильно будут бить человека, если он в рабочем проекте будет такой писать код.
А тут херня в другом на самом деле. Так как JS имеет слабую динамическую типизацию, то что угодно может быть чем угодно. То есть написал хорошую функцию, которая работает с числами. А тут какой-то еблан передал в неё null. Таким образом приходится писать проверки на входящие данные, но на все же не напишешь проверки на все и всякие структуры. Из-за подобной поеботы и придумали статические языки поверх JS - Typescript и Flow.
TS и flow не особо поможет, так как это все просто транспайлится в обычный js, а там уже что хочешь можешь передать в публичные методы на стадии выполнения. Просто скажу что JS не такой уже и баганый, если у тебя ровные руки. Для своей специфики, а это работа в вебе, где важна легковесность и функциональность. Если бы он был на уровне java или с#, то в веб бы его никто не запилил.. Другое дело когда у нас куча разработчиков на JS пытается его прихуярить к вещам на которые JS не рассчитан Кстати подобных приколов полно и в других языках, в частности Ruby
TS и флоу вполне себе помогают.
Если у тебя хачкель компилируется в ассембелер, то ты уже теряешь все свойства монад и эффектов? Похуй во что оно там транспилится, главное, какие гарантии дает язык.
Сломать эту хуйню можно только если миксовать тс и жс, но это надо быть отбитым на всю голову.
Если у тебя хачкель компилируется в ассембелер, то ты уже теряешь все свойства монад и эффектов? Похуй во что оно там транспилится, главное, какие гарантии дает язык.
Сломать эту хуйню можно только если миксовать тс и жс, но это надо быть отбитым на всю голову.
это проблемы еблана. нужно проверять что прислал сервер или вернула функция - там действительно могут быть null или undefined. А если еблан сознательно пихает строку "hello" в функцию, которая ожидает число - это не твои проблемы. Иначе - скрипты разрастутся до немыслимых размеров и слабая типизация тут будет не плюсом, а минусом.
> это проблемы еблана. нужно проверять что прислал сервер или вернула функция - там действительно могут быть null или undefined
Так ты уж определись - надо проверять или "разрастутся до немыслимых размеров".
> слабая типизация тут будет не плюсом, а минусом.
он начинает что-то подозревать...
Так ты уж определись - надо проверять или "разрастутся до немыслимых размеров".
> слабая типизация тут будет не плюсом, а минусом.
он начинает что-то подозревать...
я бы бесплатно подрабатывал избиением таких людей
Там идея в том что в случае "больше или равно" идет проверка на "меньше", если false, то значит "больше или равно" - true. И наоборот с "меньше или равно" - проверяется "больше" и возвращается обратный результат.
Ебааать
а windiws знает о таких идеях?
А винде похер на это
и к чему ты это написал? Какая разница как движок JS обрабатывает мат операции, если шутка про сравнение разных типов?
В смысле? Чувак как раз написал как работает сравнение в JS для данного случая. Нажми F12 зацени еще примеров.
0 > true && ' '
0 > true || ' '
0 > true && ' '
0 > true || ' '
виноват, затупил
Точно.
Прошу заметить:
null >= 0
true
null
Прошу заметить:
null >= 0
true
null
Пиздец логично... Биполярная логика какая-то получается.
А не проще было бы отдельно обрабатывать сравнения с null и не париться никакими проверками вообще, тупо выдавать false?
не проще, операторы строгого сравнения в JS сначала преобразовывают операнды к одному типу данных и потом уже сравнивают. но что во что преобразовывается - нету удобной и понятной таблички, нужно читать тонны скучных спецификаций на англ. языке.
да и не нужны эти таблички, просто пиши нормальный код, в неочевидных случаях сам преобразовывай типы к нужному.
да и не нужны эти таблички, просто пиши нормальный код, в неочевидных случаях сам преобразовывай типы к нужному.
А разве там при сравнении '>' или '=' или '
или '
именно так выглядит натягивание совы на глобус, то есть трёхзначной логики на двузначную
null и арифметика. Что может быть безопаснее?
только когда null перегоняют в строку
Null и литература
Библия?
В нормальных языках любое сравнение с NULL даёт NULL и нет всей этой поеботы...
сравнение с null не может давать null так как результат должен быть boolean
NULL - это не тип как бы. Что мешает булеану принять значение NULL?
Эмммм.... Логика?
То же, что мешает делить на ноль
в JS ничто не мешает делить на ноль
Компилятор
Нул - это значине типа Maybe = Some T | None. Т.к. он синглтон, можно его считать отдельным типом.
В плюсах и це NULL физически равен 0. Так что сравнение с нулем может как дать, так и не дать 0.
Причем в це еще и bool нет. Так что там результат сравнения - это 0 или 1.
Ты наверно с NaN перепутал. Любая арифметическая операция с NaN дает NaN, и при этом NaN не равен сам себе.
Причем в це еще и bool нет. Так что там результат сравнения - это 0 или 1.
Ты наверно с NaN перепутал. Любая арифметическая операция с NaN дает NaN, и при этом NaN не равен сам себе.
Что нет?
По твоей же ссылке:
an integer literal with value zero, or a prvalue of type std::nullptr_t (since C++11)
В С++11 он все так же физически равен 0. И в С++20 он также будет 0
Просто неперь у него тип std::nullptr_t, чтобы его можно было кастить к любому указателю, вот и все.
По твоей же ссылке:
an integer literal with value zero, or a prvalue of type std::nullptr_t (since C++11)
В С++11 он все так же физически равен 0. И в С++20 он также будет 0
Просто неперь у него тип std::nullptr_t, чтобы его можно было кастить к любому указателю, вот и все.
в нормальных языках null не понимает ничего кроме сравнения
В нормальных языках над нуллом можно делать только операции, которые с ним можно сделать. Ордуринг нуллейблов не определен.
Меня всегда радовало Number.isFinite(null) === isFinite(null)
Две разные функции из разных пространств имен дают разный результат. Как неожиданно!
Тут ты, конечно, прав.
Но от функций/методов, имеющих одинаковое название и предназначение логично ожидать одинакового поведения.
Но от функций/методов, имеющих одинаковое название и предназначение логично ожидать одинакового поведения.
Не. Вполне естественно, что какой-то программист хочет сделать функцию, которая учитывает ошибки предшественника, но называет её также, зато кладет в другой НС. Или вот show JQuery или MooTools. Они делают похожие вещи, но, все-таки, они разные. Это нормально. Если бы у них было одинаковое поведение, то одна из них была бы просто лишняя и это бы стало уже странным
isFinite пытается всё превратить в число, так как это - глобальный метод, и в нём null превращается в 0.
Метод объекта Number предполагает получать исключительно числа, и посылает всех нахер если это не так.
всё логично и должно работать точно так же в других языках со слабой типизацией
Метод объекта Number предполагает получать исключительно числа, и посылает всех нахер если это не так.
всё логично и должно работать точно так же в других языках со слабой типизацией
Если кому интересно, фишка в том, что == - это сравнение чего угодно с чем угодно, а <= - чисто числовое сравнение. Соответственно правила и порядок приведения типов разный.
нет.
'hello' < 'hello'
'hello' <= 'hello'
'hello' < 'hello'
'hello' <= 'hello'
Сравниваются, очевидно, charCode, как числа.
как же заебали эти "шутки" от it петросяна.
блять. курите мануалы
пишите проверки
организуйте логику так, чтобы не было разных (или не приводимых) типов данных в вашем коде.
не используйте null блять там где оно не надо.
используйте соответствующие инструменты для разных задач
нет, блять, надо сравнить теплое с мягким, и гнустно хохотать, а то, что скорее всего там тонны говнокода - мы скромно умолчим.
пиздец
блять. курите мануалы
пишите проверки
организуйте логику так, чтобы не было разных (или не приводимых) типов данных в вашем коде.
не используйте null блять там где оно не надо.
используйте соответствующие инструменты для разных задач
нет, блять, надо сравнить теплое с мягким, и гнустно хохотать, а то, что скорее всего там тонны говнокода - мы скромно умолчим.
пиздец
...следуя этим советам вы сможете написать "hello world!" без единой ошибки
можно написать все, что угодно.
ну и ... не следуя этим правилам даже хелоаорлд не напишешь без ошибок.
ну и ... не следуя этим правилам даже хелоаорлд не напишешь без ошибок.
===
Чтобы написать коммент, необходимо залогиниться