А вот и более-менее "конструктивная" критика прямиком из 2003-го.> 9999999999999999==10000000000000000
Ок. Сравниваем Number.MAX_SAFE_INTEGER с твоим числом:
> 9007199254740991 // Number.MAX_SAFE_INTEGER
> 9999999999999999
Вывод: ССЗБ, для заведомо больших чисел во всех языках пользуются либами вроде BigNumber. Опровергнуто. Хорошо еще про http://0.30000000000000004.com не вспомнил. Идем далее:
> -42 < Number.MIN_VALUE; // => true
Читаем доки: The Number.MIN_VALUE property represents the smallest <b>positive</b> numeric value representable in JavaScript. Опровергнуто. (Или положительное число должно быть меньше отрицательного? Лол.) Идем далее:
> "\n" == 0
> "\n\t\n" == 0
> [etc.]
Сам написал, сам же и опровергнул: http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 -- нестрогое равенство всегда используют на свой страх и риск, хотя определенное удобство в этом есть (например, нестрого сравнивая с null можно заодно проверить, не равен ли undefined, так что не надо писать километровые условия вроде variable === null || variable === undefined). Идем далее:
> классические факапы слабой типизации, типа "1"+2 = "12".
А если бы в итоге получили число 3, то нашелся бы другой чувак, который спросил: "ээ, а какого возвращается число, а не строка?" То есть тут дело конвенции, а не знать конвенцию -- ССЗБ. Авторы решили, что лучше пусть будет одно из двух поведений, а не кидаться сразу исключениями на каждый чих. Очень удобно кстати делать myVariable + '' вместо myVariable.toString(). Если делать "по-строгому, по-науке", то template string-и выглядели бы примерно так: `Привет, ${user.name.toString()}, у вас ${unread.toString()} непрочитанных сообщений` вместо `Привет, ${user.name}, у вас ${unread} непрочитанных сообщений`. Опровергнуто.
> implied globals, куда же без них
В strict-режиме вывалится с исключением: Uncaught ReferenceError: y is not defined. Твои претензии актуальны где-нибудь на 2003-й год. Опровергнуто.
> Костыляние засовыванием в функцию, как единственную возможность ограничить scope, уже починили?
С разморозкой:
if (true) {
const hello = 'world';
}
console.log(hello); // => Uncaught ReferenceError: hello is not defined