Как стать автором
Обновить

Комментарии 33

Вот оно, следствие слабой динамической типизации и отсутствия этапа компиляции:)
В этих примерах такие эффекты не более чем забавные задачки на сообразительность, а если что-то подобное возникнет в реальном коде? )
Если вы в реальном коде будете так делать — да пребудет с вами разум :)
Такое же может произойти и не особо умышленно. Опечатается кто-то где-то. Или скопипастит криво. Мало ли что бывает.
Интересно, при каких обстоятельствах в реальном коде нужно будет складывать строчки с объектами и приводить массив к числу? :)

Опечатки;
Использование результата функции (особенно если return в нескольких местах — и в одном случайно возвращается не тот тип, что в остальных);
Ошибки при работе со сложными составными объектами
Опечатки и бездумное проектирование функций (и бездумное применение любых фич) может доставить проблемы при использовании совершенно любого языка.
Те, кто хочет исключить возможность выстрела в ногу — давно используют TS или eslint.

Там вроде бы другое?

Как минимум, ('b' + 'a' + + 'a' + 'a').toLowerCase() там есть.

Я про то, что повторение шуток из чужих постов может быть и ненамеренным, но повторение шуток из своего собственного поста месячной давности…

А зачем в этом случае в parseInt передавать второй параметр, если он по умолчанию равен 10?

По ссылке выше поясняется, что не всегда, поэтому стоит указывать.

Потому что переводы оптом всего подряд без разбора, ради небольшой рекламной плашки в конце статьи. Статья заплюсована — плашке быть. Статья заминусована — значит скоро её сокроют, либо накрутят ботами, ибо на текущий момент в аккаунте ru_vds только статьи c рейтингом примерно около +30 (размер штата ботов плюсаторов?). Ах да, ещё они подобные моему комменты любят молча минусить без ответа.

Да как вы задрали-то! Я читал и думал "пожалуйста не скатитесь в складывание цифр и строк, пожалуйста, пожалуйста".


Меня уже не столько злят вот эти "особенности", как то, сколько контента они производят и как они затмевают все остальное. Казалось бы, ну напиши ты там о каких-то необычных вещах в модульной системе или там особенности Map/Set.


Так нет же, надо в 9007199254740991ый раз обсасывать, что там будет если ты сложишь пустой массив с числом и сравнишь полученный результат с левой ногой.

есть еще одна потенциальная ямка. нубы, которые на каждом шагу видят вот эти дурацкие примеры (строки с числами и т.д.), возможно сами будут неосознанно делать тоже самое. потому что научили.

а что-то ценное по JS редко пишут, потому что для этого напрячься нужно. да и не модно. всегда есть «язык отпущения». раньше это была пыха, теперь JS.
Не не, php никуда не делся. Он до сих пор умирает, не принижайте его :)
За необъявленную переменную и многие другие шалости в php 8 будут сразу кидать на костёр, без замечаний и предупреждений, да и складывать яблоки с числами с каждым годом всё сложнее, то ли дело JS, где можно сделать .bind(object) для стрелочной функции и ничего за это не будет ни сейчас, ни через 10 лет.

«Рискну быть зазвездённым», но
“””
‘1’ mod 0 == 1
‘7’ mod 1 == NaN
“””
это логично?

это на каком языке?

Я, конечно, не специалист, но, по-моему, это английский

Довольно смело вычислять остаток от деления на ноль.
Опять же "11" mod 2 может быть равным 3 только в каком-либо параллельном мире.

Делить строку на число, делить на ноль, сравнение без учёта типа — и кто Вам после этого враг?
Статья устарела года на 2, очень часто повторяется, и публиковали уже не раз. Насчёт Banana — точно. Все практикующие JS-программеры это уже знают. Про преведение типов и прочее.

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

Код должен быть clearly понятным, и self-documented.
А эти особенности JS — только для археологов.

Не на два, а на все двадцать.
Абсолютно согласен. А с распространением TypeScript сложения массивов с числами вообще пресекаются в зародыше )
Риторический вопрос — а зачем в JS и сложение и конкатенация выполняются через "+". Понятно, что так язык устроен, но почему? Ведь в PHP для сборки строк использовали точку (вида $var = $var.'привет';) — и это как бы снижает возможность ошибок. И не надо думать про корректность переменных, если через точку собираем строку и число = в результате получится строка.
Понятно, что так язык устроен, но почему?

Потому что так было в Java и в C++, и потому что PHP на момент создания JS был хобби-проектом одного гика.

А как PHP отличает конкатенацию от чтения свойства в таких случаях 'string'.someVar? Это конкатенация с переменной someVar или чтение свойства someVar? Знак $ в начале переменных в этом как-то замешан?

В случае 'string'.someVar это однозначно конкатенация.
Вообще в PHP обращение к свойству/методу зависит от. В одних случаях используются [] (например associative_array['key']), в других случаяхит от, знак -> (object->method()), в третьих случаях — знак :: (ClassName::method());
НЛО прилетело и опубликовало эту надпись здесь

о, спасибо
я больше 5 лет с JS и до сих пор не знал о таком
да и никто не знал наверное
вы открыли глаза
очень полезная статья
/sarcasm

{} + {} // -> '[object Object][object Object]'
— тут тоже пара фигурных скобок может интерпретироваться как блок кода.
Firefox:
{} + {} // -> NaN
Зарегистрируйтесь на Хабре, чтобы оставить комментарий