Pull to refresh

Comments 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());
UFO just landed and posted this here

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

{} + {} // -> '[object Object][object Object]'
— тут тоже пара фигурных скобок может интерпретироваться как блок кода.
Firefox:
{} + {} // -> NaN
Sign up to leave a comment.