В реальной жизни это не мешает. Если человек потратил пару недель на изучение языка то все описаные вещи не являются сюрпризом. Ну например я не стану пытаться конкатенировать массивы плюсом потом что для этого есть другой способ который все знают и все прекрасно используют.
Зато в js почти нет тошноторного джавного бойлерплейта и избыточности.
да, но в любой момент массив может вывалиться в операцию сложения из какой-нибудь переменной... Не знаю, меня раздражает подобная небрежность проектирования языка
никто не спорит тем, что JS был разработан небрежно. Вы кстати в курсе как это конкретно происходило? Даже если знаете, напишу тут кратко, может кто другой не знает, кто читает этот топик. А именно, Брендану Айху была дана 1 неделя на разработку языка, и была сказано, что если не он не сделает ЧЕГО-ТО, то вообще ничего не будет, браузер выйдет такой фичи. Ну, он (физик по образованию), быстренько накидал нечто, взяв за основу синтаксис Си, кложуры / first class functions из Скима и прототипическое наследование из малоизвестного языка Селф. Коктейль из трех составных частей
( ... )
За книгу спасибо - посмотрю. Что же касается энтерпрайз разработки, то тут я скептик. Чтобы большой проект на основе скриптового языка, который одновременно интенсивно пишется значительным количеством не супер-профессиональных разработчиков, не разваливался на ходу его необходимо обложить таким количеством тестирующего кода, что стоимость разработки взлетит до небес, а болтливость джавы покажется скромным цветочком.
Вообще то ситуация со сравнением value!== value такая же как и в джаве : Java Language Specification (JLS) says:
Floating-point operators produce no exceptions (§11). An operation that overflows produces a signed infinity, an operation that underflows produces a denormalized value or a signed zero, and an operation that has no mathematically definite result produces NaN. All numeric operations with NaN as an operand produce NaN as a result. As has already been described, NaN is unordered, so a numeric comparison operation involving one or two NaNs returns false and any != comparison involving NaN returns true, including x!=x when x is NaN.
Ну а по поводу Boolean('false')- ну еврейский язык ( ЗОГ ага) как по анекдоту про раввина - И ты прав.. '2' * '3' это 6, а '2' + '3' это '23' - опять же OOP классический + для строк определен а * нет, почти джава
Я в курсе про операторы. Но здесь и нет речи об определении своего оператора - + идет из стринга, если бы был autoboxing из String в Integer - ты бы получил ровно тот же еффект. Я собственно это имел ввиду. А C++ style операторы - зло, с оператором() можно такого наворотить ( и блин воротят) что никто включая автора перла не поймет.... :-)
Comments 36
Зато в js почти нет тошноторного джавного бойлерплейта и избыточности.
Reply
Не знаю, меня раздражает подобная небрежность проектирования языка
Reply
Reply
Что же касается энтерпрайз разработки, то тут я скептик. Чтобы большой проект на основе скриптового языка, который одновременно интенсивно пишется значительным количеством не супер-профессиональных разработчиков, не разваливался на ходу его необходимо обложить таким количеством тестирующего кода, что стоимость разработки взлетит до небес, а болтливость джавы покажется скромным цветочком.
Reply
это не недоработка, это фича
например, я хочу прочитать из локал сториджа браузера параметр userAge, но я не знаю, есть ли там вообще чего-то
пишем
var userAge = localStorage.getItem("userAge") || 20; // take stored value, if not available, set userAge to default value 20
или скажем так
var userAge = localStorage.getItem("userAge") || localStorage.getItem("defaultUserAge") || 20;
кристальная простота и ясность, ни малейшей лишней ботвы, это именно пример того за что любим js
Reply
Reply
(The comment has been removed)
Reply
Reply
Reply
Reply
Java Language Specification (JLS) says:
Floating-point operators produce no exceptions (§11). An operation that overflows produces a signed infinity, an operation that underflows produces a denormalized value or a signed zero, and an operation that has no mathematically definite result produces NaN. All numeric operations with NaN as an operand produce NaN as a result. As has already been described, NaN is unordered, so a numeric comparison operation involving one or two NaNs returns false and any != comparison involving NaN returns true, including x!=x when x is NaN.
Ну а по поводу Boolean('false')- ну еврейский язык ( ЗОГ ага) как по анекдоту про раввина - И ты прав..
'2' * '3' это 6, а '2' + '3' это '23' - опять же OOP классический + для строк определен а * нет, почти джава
Reply
Reply
Reply
Reply
Reply
Reply
Leave a comment