25.09.2016, 21:07
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Вот смотри сколько геморроя. Там просто 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;
},
Последний раз редактировалось warren buffet, 25.09.2016 в 21:09.
|
|
25.09.2016, 21:12
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от Rise
|
это для программистской логики
|
var_dump() для программистской логики. )))
|
|
25.09.2016, 21:31
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Прикол, отпостил эту хрень и косяк нашел. for(var id in this.cart) - вот еще подстава с этими this. Не должно работать, а работает, потому что забыл var тут try{cart=JSON.parse(c);} и все срослось. )
|
|
25.09.2016, 22:22
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Rise, а если нету cart[id].ap? Или если там -30? Или 30.35?
Переменная должна быть, там должно быть целое положительное число. И еще этот NaN проверить надо.
Я понимаю, что юзер чинить куки не полезет, но туда может записаться какая угодно хрень теоретически.
|
|
25.09.2016, 23:16
|
Профессор
|
|
Регистрация: 17.06.2016
Сообщений: 509
|
|
ochen,
Лучшее объяснение я прочитал в книге от орэйли. NaN используется для представления числового результата не имеющего представление.
Т.е деление 0/0 мы представить можем, но результат уже не в состоянии срендерить, если только ты не просветленный дзен-мастер.
|
|
25.09.2016, 23:19
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Сообщение от warren buffet
|
Rise, а если нету cart[id].ap?
|
Значит undefined, значит isNaN -> true.
Сообщение от warren buffet
|
Или если там -30? Или 30.35?
Переменная должна быть, там должно быть целое положительное число. И еще этот NaN проверить надо.
Я понимаю, что юзер чинить куки не полезет, но туда может записаться какая угодно хрень теоретически.
|
Ну не предполагается в js типа int, только float, а потому в таком случае нужно пару строк дополнительного кода, да. Печалька.
(на самом деле в современном js есть типизированые массивы, и вообще asm.js, но это не подходящий юзкейс для них)
Эмулировать по-старинке, если хочется, можно примерно так:
function uint(n){ retutn n>>>0 }
function int(n){ retutn n|0 }
function float(n){ retutn +n||0 }
Кстати регулярка у вас действительно нацеленная на float.
__________________
29375, 35
Последний раз редактировалось Aetae, 25.09.2016 в 23:31.
|
|
26.09.2016, 04:44
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от Aetae
|
регулярка
|
Запросто, я ни одной сам не написал, все потыренное, у меня регулярный кретинизм.
Цитата:
|
Значит undefined, значит isNaN -> true.
|
То есть вообще любую переменную с числом можно проверять без typeof на наличие и на null функцией isNaN() заодно проверяя и на число? Ну все, спасибо господа, теперь мои дети не будут голодать. )
Я несколько раз смотрел как написаны isset's на js и каждый раз посмотрев закрывал в печали. Там кошмар.
|
|
26.09.2016, 05:00
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от Rasy
|
дзен-мастер.
|
Дзен это сейчас, сейчас срендерить нельзя, оно уже в прошлом, то есть дзен - надувательство. )))
Конечно, погроммисты могут принудить юзеров и NaN, null, undefined понимать в интерфейсах, но здесь предмет глубже. Они просто еще не сломали сопротивление юзеров в самом очевидном, в том что 0/0=0. Во всем остальном давно сломали. Пишут как доктора или как юристы в своей погроммистской логике, другого нет, юзеру приходится изворачиваться, приспосабливаться, и ему уже даже нравится выполнять текстовые команды раскиданные по менюхам и он уже называет это графический интерфейс.
Погроммисты делают свою культуру.
|
|
26.09.2016, 05:07
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Причем если даже погроммиста наказать приковав к своему детищу цепями, как к веслам на галере, он нисколько не огорчится, ему нормально когда все через жопу, не для людей. И сравнить нельзя. Возьмем программу для людей, прикуем к ней программиста, он сделает за отчетный период в ней больше и лучше и скажут - ну вот, этот программист просто лучше. Не скажут же - потому что его культура гуманная, а не техническая. Просто его техника лучше.
|
|
26.09.2016, 05:13
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Грань между профанацией и гуманизмом весьма тонкая и неуловимая. Под давлением охреневшего заказчика не могущего понять, отчего клиенты не жалуют, погроммист может нахерачить свистелок и перделок типа гуманных, типа прокрустова ложа для ввода номера телефона, а бизнес-логику реализовать в сугубо техническом жанре. Скочет как сантехник в стеклянных бусах, а чо, красиво же. Лол.
Последний раз редактировалось warren buffet, 26.09.2016 в 05:25.
|
|
|
|