Hедопонимание с typeof
Приветствую.
Объясните, пожалуйста, почему буква превращается в цифру, когда typeof? Я, вероятно, не понимаю многого, но тут совсем не понимаю. var str = 'd23'; console.log(isNaN( +str[0])); // true console.log(isNaN( str[0])); // true console.log(typeof str[0] == "number"); //false console.log(typeof +str[0] == "number"); //true |
Если преобразовать строку в число использую унарный "+" или number(), то результатом является NaN. Т.е.функция isNaN("какая-нибудь строка") возвращает true, т.к. это не может быть приведену к числу. Почему же typeof говорит, что это число, если это NaN. Я не могу понять именно этот момент.
|
ochen,
потому что NaN относится к Number))) Это типа число, которое нифига не число. Или как в матанализе - неопределенность |
Как вообще можно это понять, если везде написано, что NaN это НЕ ЧИСЛО. Даже в описание number.NaN написано, что это не число. Т.е. typeof считает его числом, но нигде не написано, что это число? Или это где-то в очень сложных книгах?
|
ochen,
Умом Россию не понять. Почитай экму |
Да, вот так уже более точно. Вероятно, я бы мог нагуглить ответ, если бы понимал, как меня обманывает NaN. Джуваскрипт стал более понятен. Спасибо.
|
А зачем нужен NaN? Мне кроме вреда эта шняга ничего не принесла. Покажите плес пользу.
|
warren buffet,
Если говорить о практике - он в основном нужен чтобы условия проверяющие результаты математических операции в случае ошибки оных всегда возвращали false. Это удобно во многих случаях: не приходится писать дополнительные проверки и лишнюю обработку ошибок. Но как и с любым подобным удобством, это усложняет отладку. Суть NaN в том, что он не равен ничему, даже самому себе.) alert(NaN === NaN) |
Как в математических операциях может возникнуть NaN?
ЗЫ По-моему это академизм. |
warren buffet,
Например точно также как в вашем случае: неподходящие входные данные. var str = 'd23'; var num = +str + 5; if(num > 5) ... //false if(num == 5) ... //false if(num < 5) ... //false return ...И никаких лишних проверок и заморочек. Не число? Ну и хрен с ним. Прошляпить некорректные данные тоже легко, но что тут поделаешь. |
Я про что и говорю - return... Просто он меня задрал вылезать где не попадя в интерфейсах (с null я уже понял подставу жабы скрипучей блин), а NaN все еще бывает лезет. Практика же идет по самому тупому пути, типа ну будет 0, а хера, будет на три буквы NaN. Зашибись. Лол.
Ну, то есть, каким может быть человеко-читаемый результат вычисления num = +str + 5 ? Что написать в return? ))) |
Академизм
if(foo.length) // студент, вы сравниваете число на тип boolean // щаз... if(foo.length > 0) // пять, давайте зачетку Но мы ж так не делаем, нахер академизм, length не может перескочить через 0? Может, а нам известно, что не может. |
Ты скажи мне что ты хошь, я те покажу как надо.)
Стартовый пример ни о чём не говорит. |
Цитата:
|
Яростный Меч, то есть NaN существует в математике как скажем бесконечность?
|
Aetae, я хочу чтобы null рендерился как "" и чтобы NaN рендерился как 0.
|
Цитата:
например, 1/0 дает бесконечность. в js сделано так: если для какой-то точки нет значения, но есть предел, то просто берется этот предел (возможно, бесконечный), например 1/0 = Infinity Math.log(0) = -Infinity Math.pow(0, 0) = 1 Ну а если даже предела нет, то только тогда подставляется NaN, как в случае Math.log(-1). Вообще говоря, тут будет комплексное число, однако js о таких не в курсе. |
Да не математика нужна, а чтобы эта пустая хрень не лезла в хтмл. На php просто милое дело
$foo=null; echo $foo; // ничего $num='s23'; echo (int) $num; // 0 А сделай на жабе скрипучей так и получишь оно самое. |
function senslessConvertToString(n){ return n === null ? '' : (+n || 0).toString() } console.log(senslessConvertToString(null)); //'' console.log(senslessConvertToString('s23')); //'0' Но с чего вдруг должно быть именно вот так, и никак иначе, мне всё ещё непонятно. Приведение типов в пыхе ну вот ни капельки не логичнее чем в жабе, а скорее даже совсем наоборот. Синдром утёнка? |
С того, что практика всегда идет по легкому пути. Я понимаю, что пых изначально и заточен на рендер, а жабаскрипт на что тогда?
Причем тут логика? При том, что академизм. Типа вот так правильно. А потом сидишь и смотришь на NaN в корзине или на undefined вместо ничего, лол. Ну то есть что такое NaN, null, undefined в человеческой логике? Это ничего. Ничего и должно выводиться. |
Вот смотри сколько геморроя. Там просто id-am-ap, числа, в куках, куки текст, значит там может быть что угодно, или может быть ничего. Проверь, может я тупой и можно упростить, ибо мне пришлось регой еще проверять, чтобы эти гребаные NaN не проверять.
is_numeric=function(v){ return /^\d?\d+\.?\d*$/.test(v); }, get_cart=function() { var c=oCookie.load(key); if(!c) return {}; try{cart=JSON.parse(c);}catch(e){return {};} for(var id in this.cart){ var item=cart[id]; if( is_numeric(id)==false || typeof item.am==='undefined' || typeof item.ap==='undefined' || is_numeric(item.ap)==false || is_numeric(item.am)==false ) { delete(cart[id]); continue; } oCookie.save(key,JSON.stringify(cart)); } return cart; }, |
Цитата:
|
Прикол, отпостил эту хрень и косяк нашел. for(var id in this.cart) - вот еще подстава с этими this. Не должно работать, а работает, потому что забыл var тут try{cart=JSON.parse(c);} и все срослось. )
|
Rise, а если нету cart[id].ap? Или если там -30? Или 30.35?
Переменная должна быть, там должно быть целое положительное число. И еще этот NaN проверить надо. Я понимаю, что юзер чинить куки не полезет, но туда может записаться какая угодно хрень теоретически. |
ochen,
Лучшее объяснение я прочитал в книге от орэйли. NaN используется для представления числового результата не имеющего представление. Т.е деление 0/0 мы представить можем, но результат уже не в состоянии срендерить, если только ты не просветленный дзен-мастер. |
Цитата:
Цитата:
(на самом деле в современном js есть типизированые массивы, и вообще asm.js, но это не подходящий юзкейс для них) Эмулировать по-старинке, если хочется, можно примерно так: function uint(n){ retutn n>>>0 } function int(n){ retutn n|0 } function float(n){ retutn +n||0 } Кстати регулярка у вас действительно нацеленная на float. |
Цитата:
Цитата:
Я несколько раз смотрел как написаны isset's на js и каждый раз посмотрев закрывал в печали. Там кошмар. |
Цитата:
Конечно, погроммисты могут принудить юзеров и NaN, null, undefined понимать в интерфейсах, но здесь предмет глубже. Они просто еще не сломали сопротивление юзеров в самом очевидном, в том что 0/0=0. Во всем остальном давно сломали. Пишут как доктора или как юристы в своей погроммистской логике, другого нет, юзеру приходится изворачиваться, приспосабливаться, и ему уже даже нравится выполнять текстовые команды раскиданные по менюхам и он уже называет это графический интерфейс. Погроммисты делают свою культуру. |
Причем если даже погроммиста наказать приковав к своему детищу цепями, как к веслам на галере, он нисколько не огорчится, ему нормально когда все через жопу, не для людей. И сравнить нельзя. Возьмем программу для людей, прикуем к ней программиста, он сделает за отчетный период в ней больше и лучше и скажут - ну вот, этот программист просто лучше. Не скажут же - потому что его культура гуманная, а не техническая. Просто его техника лучше.
|
Грань между профанацией и гуманизмом весьма тонкая и неуловимая. Под давлением охреневшего заказчика не могущего понять, отчего клиенты не жалуют, погроммист может нахерачить свистелок и перделок типа гуманных, типа прокрустова ложа для ввода номера телефона, а бизнес-логику реализовать в сугубо техническом жанре. Скочет как сантехник в стеклянных бусах, а чо, красиво же. Лол.
|
Цитата:
|
У меня в калькуляторе нет кнопки sqr. Включен научный режим. А в бытовом режиме есть такая кнопка. Давай с этого начнем сперва, с корня? Зачем тебе корень? Возводи число в дробную степень и все.
Я и говорю, дзен необорим. Культура. Колом ее оттудова. ))) |
Задолбался бороться с этой культурой. Вот сделай все по полочкам, без запиночки, собери все в группки, будь ласков подгони фоточки, в общем заполируй все, чтоб глаз вышибало к чертям.
А вы знаете погроммисты, что выбитая в полу супермаркета плитка повышает продажи товаров на полках с двух сторон от себя? Вы еще небось верите, что проходы заставленные палетами - это потому что на складе места нет. Лол. |
Цитата:
Умные рассуждают о мере, а очень умные о крайностях. ))) |
warren buffet,
ты борешься с Системой? :D |
Я же написал с чем - с культурой. Так что, будем возводить или корни извлекать. Корни вообще откуда взялись знаешь? Прямо из землемеряния, из геометрии. То есть графическое решение, а не алгебраическое.
|
warren buffet,
Ты неистов |
Часовой пояс GMT +3, время: 20:14. |