> Если раньше, например, парсер просто передавал строку, а потом в новой версии стал распознавать числа, сразу отвергать данные что-ли?
Ну а если вам вместо строки массив или объект прилетит — тоже можно не переживать? Протокол поменялся ведь, в этом случае или версирование используют, или клиента переписывают.
По-поводу операторов — "==" или "===" — это два разных оператора с разной моделью поведения и используемых обычно в строго определенных ситуациях.
Кстати, toFixed для форматирования предназначен, а не для округления. Для округления используют Math.round.
Идея в том что от сервера должна приходить или строка или число или массив или объект или что-нибудь еще, но всегда одного и того же типа. Плавающий тип — это всегда спагетти в коде, возможные ошибки и куча лишних проверок, которых можно было бы избежать будь у сервера строгий контракт.
> но вот те, кто сидят на линуксе — не пользуются IDE от Microsoft
У них компилятор для node и source-map генерируются (хотя даже сгенерированный код легко и просто читать в большинстве случаев). Отлаживайте на здоровье :)
Ну хорошо-хорошо, некоторые не совсем очевидны, например «Unexpected token ILLEGAL» (хотя качественный редактор вам жирно и пестро пометит место, где у вас ILLEGAL прячется) :)
Ну и да, новичкам это, разумеется, будет полезно и интересно
Эммм, простите, но мне кажется что тексты приведенных здесь ошибок абсолютно очевидно указывают на причину этих ошибок.
Неужто увидев в консоли "Uncaught TypeError: Cannot set property ‘foo’ of null, Uncaught TypeError: Cannot set property ‘foo’ of undefined" вы будете чесать репу и делать что-то иное кроме как искать .foo или ['foo'] в строке указанной в стек-трейсе?
Когда нового мало то и daily занимает минут 10-15 обычно.
daily нужны чтобы команда была в курсе всех изменений которые происходят в коде. Очень плохо когда человек закрывается на несколько дней в и делает свой тикет, а потом выясняется что все можно было сделать проще или что изменения которые он сделал задевают работу других разработчиков. Обычно общаться голосом гораздо легче и эффективнее чем смотреть на доску в трекере.
> Если пытаться подобрать аналогию из реального мира, то, когда перед функциональщиком стоит задача расставить мебель в комнате, он мыслит категориями единиц мебели (диван, стул, стол, кресло и т.д.), а императивщик — категориями частей, из которых состоит мебель (досточки, гаечки, шурупчики и т.д.). Оба подхода имеют право на существование, просто функциональный подход основан на более высоком уровне абстракции.
Скорее не так. «императивщик» думает: «диван двигаем сюда, потом кресло сюда, люстру прикручиваем к потолку. Нет — сначала шкаф поставим, а то диван дверной проем загораживает». А «функциональщик» так: «диван здесь, кресло здесь, шкаф тут. Вперед, компилятор, я пойду кофе попью».
Суть в том что в функциональных язык код фокусируется на результате, а в императивных — на процессе.
Не такой уж и тяжелый, в самом-то деле — в целом не критично. Dart все-таки больше предназначен для написания сколь-нибудь сложных приложений, а не статических страниц с парой скриптов на них.
Формально он есть в JavaScript: это тип Object. Разница с any, насколько я понимаю в том, что объявляя переменную типа Object вы ограничиваете доступные методы методами базового типа Object. В случае с any вы просто говорите компилятору чтобы он игнорировал все действия с этим типом, предполагая их как допустимые.
Насколько я понимаю, any — это просто способ сказать компилятору, чтобы он не проверял тип и ты берешь за это ответственность на себя. Т.е. он перестает «ругаться» если ты будешь делать с переменной этого типа что-нибудь странное.
По-поводу Symbol: есть заранее определенные стандартные символы, которые позволяют настроить поведение объекта. Самое интересное, наверное, это возможность создания пользовательского for..of итератора через Symbol.iterator. MDN.
Ну а если вам вместо строки массив или объект прилетит — тоже можно не переживать? Протокол поменялся ведь, в этом случае или версирование используют, или клиента переписывают.
По-поводу операторов — "==" или "===" — это два разных оператора с разной моделью поведения и используемых обычно в строго определенных ситуациях.
Кстати, toFixed для форматирования предназначен, а не для округления. Для округления используют Math.round.
Да уж и 1.2.0 вышла. Изменения здесь
У них компилятор для node и source-map генерируются (хотя даже сгенерированный код легко и просто читать в большинстве случаев). Отлаживайте на здоровье :)
Ну и да, новичкам это, разумеется, будет полезно и интересно
Неужто увидев в консоли "
Uncaught TypeError: Cannot set property ‘foo’ of null, Uncaught TypeError: Cannot set property ‘foo’ of undefined" вы будете чесать репу и делать что-то иное кроме как искать.fooили['foo']в строке указанной в стек-трейсе?daily нужны чтобы команда была в курсе всех изменений которые происходят в коде. Очень плохо когда человек закрывается на несколько дней в и делает свой тикет, а потом выясняется что все можно было сделать проще или что изменения которые он сделал задевают работу других разработчиков. Обычно общаться голосом гораздо легче и эффективнее чем смотреть на доску в трекере.
Скорее не так. «императивщик» думает: «диван двигаем сюда, потом кресло сюда, люстру прикручиваем к потолку. Нет — сначала шкаф поставим, а то диван дверной проем загораживает». А «функциональщик» так: «диван здесь, кресло здесь, шкаф тут. Вперед, компилятор, я пойду кофе попью».
Суть в том что в функциональных язык код фокусируется на результате, а в императивных — на процессе.
any— это просто способ сказать компилятору, чтобы он не проверял тип и ты берешь за это ответственность на себя. Т.е. он перестает «ругаться» если ты будешь делать с переменной этого типа что-нибудь странное.По-поводу Symbol: есть заранее определенные стандартные символы, которые позволяют настроить поведение объекта. Самое интересное, наверное, это возможность создания пользовательского for..of итератора через Symbol.iterator. MDN.