Это точно
сначала выучи его, там все логично
Это точно
Ну раз Иисус сказал то это точно...
Батя мир тоже на Javascript написал?
Ибо сказано: Всё есть объект.
Ага. 3 foreach и все с разной логикой. Спасибо, Javascript!
Использовать обычный for религия не позволяет?
for (x in y), for (x of y) или обычный for(i, i
Один для объектов а другой для массивов
Т.е. какой-то универсально работающий с одинаковым поведением сделать не позволяет религия?
При том, что массив - частный случай объекта в JS
При том, что массив - частный случай объекта в JS
Массивы от объектов не отличаешь? Пойди поучи, без шуток
Как тогда из 5 и 3 получить 8?
'5' + 3 -5 -5 -5 -5 -5 -5 -5 -5 -5
Сначала не понял, а потом кааааааак понял!
ты сверхразум
ты сверхразум
5+3 без кавычек
5*1 + 3*1
+'5' + 3
~~'5' + 3
Логика javascript темна и полна ужасов.
это точно. например, [] + {} = "[object Object]", a {} + [] = 0
просто "+" в JS хитровыебаннейший оператор, работа которого зависит от первого аргумента.
'1' + 1 === '11' и 1 + '1' === '11'
Ничего не понял, видимо javascript действительно ужасен и полон противоречий
Сначала выучи его, там все логично.
{} + [] => +[], т.к. {} интерпретируется как пустой блок кода, а унарный плюс преобразует пустой массив в 0
[] + {} => "" + {} => "[object Object]", т.к. если один из операндов строка, то второй тоже преобразуется в строку ({}).toString() => "[object Object]"
{} + [] => +[], т.к. {} интерпретируется как пустой блок кода, а унарный плюс преобразует пустой массив в 0
[] + {} => "" + {} => "[object Object]", т.к. если один из операндов строка, то второй тоже преобразуется в строку ({}).toString() => "[object Object]"
Логично, это когда язык не дает применять опасные type mismatch операции, подобное УГ уже похавали в С\С++, но JS вывел это на новый уровень. В адекватном дизайне языка, например RUST, даже int32 + int64 без явного указания что должно произойти сделать нельзя.
Но ведь неявное приведение типа без потери данных безопасно. Если применение безопасной операции недопустимо, то дизайн языка далёт от идеала.
Вот только так не бывает. Все упирается в то, что разработчик просто человек, а правила приведений быстро становятся сложны и тернисты. В результате на казалось бы банальном сложении можно получить что угодно. Разработчики C, тоже думали, что все у них там безопасно, а потом оказалось, что люди не роботы.
Ты часто пустой литерал объекта с пустым массивом складываешь?
Т.к. если впихнуть [] и {} в переменные, то результат {} + [] и [] + {} идентичен друг-другу и равен "[object Object]"
Т.к. если впихнуть [] и {} в переменные, то результат {} + [] и [] + {} идентичен друг-другу и равен "[object Object]"
Учитывая, что в JS переменная может сменить свой тип(что почти всегда ошибка в коде, но все же это возможно). Потенциально словить такое поведение можно. Я соглашусь, что это крайне редкий источник багов в JS, но это не значит, что проблемы не очевидных(читай не адекватных), правил приведения типов нет.
>>Логично, это когда язык не дает применять опасные type mismatch операции
К сожалению, это издержки динамических языков. Во всяких макросах и скриптах по другом в принципе тяжело. Для браузеров... млин, вот чего не шарю, того не шарю. Может логичнее было пилить строгую типизацию, нужно создать параллельную вселеную и проверить.
К сожалению, это издержки динамических языков. Во всяких макросах и скриптах по другом в принципе тяжело. Для браузеров... млин, вот чего не шарю, того не шарю. Может логичнее было пилить строгую типизацию, нужно создать параллельную вселеную и проверить.
>> Может логичнее было пилить строгую типизацию, нужно создать параллельную вселеную и проверить.
TypeScript же
TypeScript же
wasm
ничто не мешает кинуть ошибку в рантайме.
foo = '1'
bar = 2
print(foo+bar)
В Питоне приводит к эксепшону(увы, не на этапе парсинга), вместо попытки магически сложить строку с числом. В JS код молча сложит эти переменные, что точно так же приведет к багу, но лучше иметь явный стектрейс с эксепшеном, чем ловить undefined behavior и дебажить где именно получилось так, что пользователь на UI увидел какую-то фигню вместо нормально значения.
foo = '1'
bar = 2
print(foo+bar)
В Питоне приводит к эксепшону(увы, не на этапе парсинга), вместо попытки магически сложить строку с числом. В JS код молча сложит эти переменные, что точно так же приведет к багу, но лучше иметь явный стектрейс с эксепшеном, чем ловить undefined behavior и дебажить где именно получилось так, что пользователь на UI увидел какую-то фигню вместо нормально значения.
*молча стоит с плакатом TypeScript - WTF*
Для этого и придуман TypeScript, который устраняет проблемы с типизацией.
И тут появляется 1сник.
Когда мы успели перейти к говноедству?
Ведь ты понимаешь, что не приживётся?
Ещё пока рано делать выводы.
Какой ты наивный.
Ты на слабо берешь? Если он будет после каждого твоего коммента это вставлять, то если и не приживется, то запомнится надолго. А если запомнится, то после каждого твоего комментария про говно будет вставляться. И какова цена? Минусы реакторчан? Стоит того!
А в чём нелогичность 1С? Да, он выглядит как страхоёбище, но разве в нём есть такие же нелогичности как в ЖС?
не хватает каноничного формата
Пофиксил
Это как с афроамериканцами: ниггера ниггером может называть только ниггер
и с президентами в большинстве стран так же: свои своего могут обзывать последними словами, но когда иностранец так же назовёт их президента - шлют иностранца нахуй и доказывают, что это не так.
Что бы понять что говно это говно, нужно его попробовать, классика
Достаточно понюхать
Чтобы унюхать запах, совершенно необходимо, чтобы частицы его попали в твои рецепторы.
За что ты так со мной? Как мне теперь жить с этой мыслью?
А если я считаю, что javascript очень хороший и удобный язык, то я не javascript разработчик?
Просто ты с ним мало работал ИЛИ не работал плотно с другими языками
...или плотно не работал с другими матёрыми джеесниками на легаси проектах выших предшественников.
Люди переработали с другими языками и по другому просто мыслить не могут
Работает и ладно. Для таких впечатлительных как вы, есть фреймворки :)
Эх, раньше хоть айтишники не были хипстотой...
был видосик где на мекой конференции джаву обсуждали, и среди слушателей всегда ктото находился кто оправдывал такое поведение, типа куча старого кода которые надо поддерживать, компилятор так не умеет и тому подобное, но ведь есть языки которые компилируют код для ява машины и при этом с нормальным не архаичным и логичным синтаксисом, на это уже никто не мог возразить, просто ктото уже привык писать так и если будет проще удобнее то будет непривычно, а главное новички вообще смогут не разбираться в тонкостях и писать также как опытный
Причём тут джава, при обсуждении язвоскрипта?
при том что яваскрипт такой же опенсорсный и по тем же принципам примерно апгрейдят, тоесть через жопу с поддержкой кучи говна которая была изначально, типа для совместимости
"Причём тут джава, при обсуждении язвоскрипта?"
Баянчик конечно, но забавный
https://www.youtube.com/watch?v=0ZQk2SKDlYY
https://www.youtube.com/watch?v=0ZQk2SKDlYY
0.1 + 0.2 === 0.3 выдаст false - можете в консоли проверить.
проблемы здесь у всех https://0.30000000000000004.com/
Да прям у всех, по твоей же ссылке видно, что не у всех.
$ perl -mMath::BigFloat -e 'print "Equal\n" if Math::BigFloat->new(0.1) + 0.2 == 0.3;'
Equal
$ perl -mMath::BigFloat -e 'print "Equal\n" if Math::BigFloat->new(0.1) + 0.2 == 0.3;'
Equal
Как и во множестве других языков, включая C, Java, Python и т.д.
Но не в Perl!
$ perl -mMath::BigFloat -e 'print "Equal\n" if Math::BigFloat->new(0.1) + 0.2 == 0.3;'
Equal
$ perl -mMath::BigFloat -e 'print "Equal\n" if Math::BigFloat->new(0.1) + 0.2 == 0.3;'
Equal
Чтобы написать коммент, необходимо залогиниться