Но вообще, судя по тому, что Dart не взлетел (а VBScript в своё время отмер), по поводу «смены власти» в браузерах у меня есть сомнения. Должно произойти что-то экстраординарное, чтобы производители браузеров выкинули на помойку свои отполированные V8 и SpiderMonkey.
Простой пример: если на странице в счётчике просмотров красуется «NaN», это неприятно, но не фатально. Или было бы лучше, если из-за такой ошибки вся страница становилась нефункциональной?
С другой стороны, скажу честно, в моей нынешней практике незамеченные баги, вызванные несоответствием типа — редкость. При условии, что в нужном месте производится проверка isFinite() (кстати, NaN может случиться и не только от приведения типов), аргументы (при необходимости) явно приводятся к конкретному типу, и сравнивание производится только через === за исключением == null.
В JS, кстати, тоже если ты присвоил foo = 42, то оно там так и останется лежать в виде числа, пока этой переменной не присвоишь что-нибудь другое. Даже после foo + "bar".
Только не подумайте, что придираюсь по мелочам, вот тут я не понял немного.
'33.4' + 1 == 34.4 // мы видели не все...
На выходе получится '33.41', поведение такое же, как и строчкой выше («если хотя бы один операнд — строка, складываем как строки»), чего тут неожиданного?
Собственно, да.
А если есть необходимость сначала использовать require('fs').stat(), где коллбек вызывается с (int err, object result), а затем какой-нибудь megaLib.doJob(), вызывающий коллбек с (object result)? Насколько я понял, итератор поперхнётся, приведя result к boolean и получив true.
А как же потом программно обрабатываются нажатия этих клавиш? Они определяются как геймпад, а затем вручную в каком-нибудь ниндзя-трейдере или есигнале маппятся на действия?
Буквально неделю назад писал свой арканоид (вернее, «арканоидо-оид», потому как управление другое) по правилам js1k. Выкладывать на хабр не стал, не думал, что кого-то заинтересует, видимо, зря.
Но сейчас, с позволения хабровчан, скромно оставлю ссылку: демо, код.
String.prototype.count
? В спеках такого нет.Весь jQuery тащить ради одного метода? Он же пишется элементарно. А в ES5 уже есть
String.prototype.trim()
из коробки.> is_numeric(42)
TypeError: Object 42 has no method 'replace'
Плюс к тому, этот метод может привести к непредсказуемым результатам:
Джаваскрипт всё-таки надо писать на джаваскрипте.
Но вообще, судя по тому, что Dart не взлетел (а VBScript в своё время отмер), по поводу «смены власти» в браузерах у меня есть сомнения. Должно произойти что-то экстраординарное, чтобы производители браузеров выкинули на помойку свои отполированные V8 и SpiderMonkey.
С другой стороны, скажу честно, в моей нынешней практике незамеченные баги, вызванные несоответствием типа — редкость. При условии, что в нужном месте производится проверка
isFinite()
(кстати, NaN может случиться и не только от приведения типов), аргументы (при необходимости) явно приводятся к конкретному типу, и сравнивание производится только через===
за исключением== null
.foo = 42
, то оно там так и останется лежать в виде числа, пока этой переменной не присвоишь что-нибудь другое. Даже послеfoo + "bar"
.На выходе получится
'33.41'
, поведение такое же, как и строчкой выше («если хотя бы один операнд — строка, складываем как строки»), чего тут неожиданного?А если есть необходимость сначала использовать
require('fs').stat()
, где коллбек вызывается с(int err, object result)
, а затем какой-нибудьmegaLib.doJob()
, вызывающий коллбек с(object result)
? Насколько я понял, итератор поперхнётся, приведя result к boolean и получив true.Но это, наверное, читерство.
Это не особенность JS как такового, а типа Number (который double).
Number.MIN_VALUE
равен 5×10-324,1 / Number.MIN_VALUE
по-идее должен бы быть равен 2×10323, но это число слишком большое.А наоборот — пожалуйста, точности хватает.
Подробнее о том, почему в отрицательную сторону экспонента немного «вместительнее» — на википедии.
*UPD:* Поправил пример
npm install scrypt
под win7 — это для меня было задание #0.Но сейчас, с позволения хабровчан, скромно оставлю ссылку: демо, код.