Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 25.09.2016, 21:07
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 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.
Ответить с цитированием
  #22 (permalink)  
Старый 25.09.2016, 21:12
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от Rise
это для программистской логики
var_dump() для программистской логики. )))
Ответить с цитированием
  #23 (permalink)  
Старый 25.09.2016, 21:31
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Прикол, отпостил эту хрень и косяк нашел. for(var id in this.cart) - вот еще подстава с этими this. Не должно работать, а работает, потому что забыл var тут try{cart=JSON.parse(c);} и все срослось. )
Ответить с цитированием
  #24 (permalink)  
Старый 25.09.2016, 22:22
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Rise, а если нету cart[id].ap? Или если там -30? Или 30.35?

Переменная должна быть, там должно быть целое положительное число. И еще этот NaN проверить надо.

Я понимаю, что юзер чинить куки не полезет, но туда может записаться какая угодно хрень теоретически.
Ответить с цитированием
  #25 (permalink)  
Старый 25.09.2016, 23:16
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

ochen,
Лучшее объяснение я прочитал в книге от орэйли. NaN используется для представления числового результата не имеющего представление.
Т.е деление 0/0 мы представить можем, но результат уже не в состоянии срендерить, если только ты не просветленный дзен-мастер.
Ответить с цитированием
  #26 (permalink)  
Старый 25.09.2016, 23:19
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 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.
Ответить с цитированием
  #27 (permalink)  
Старый 26.09.2016, 04:44
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от Aetae
регулярка
Запросто, я ни одной сам не написал, все потыренное, у меня регулярный кретинизм.

Цитата:
Значит undefined, значит isNaN -> true.
То есть вообще любую переменную с числом можно проверять без typeof на наличие и на null функцией isNaN() заодно проверяя и на число? Ну все, спасибо господа, теперь мои дети не будут голодать. )

Я несколько раз смотрел как написаны isset's на js и каждый раз посмотрев закрывал в печали. Там кошмар.
Ответить с цитированием
  #28 (permalink)  
Старый 26.09.2016, 05:00
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от Rasy
дзен-мастер.
Дзен это сейчас, сейчас срендерить нельзя, оно уже в прошлом, то есть дзен - надувательство. )))

Конечно, погроммисты могут принудить юзеров и NaN, null, undefined понимать в интерфейсах, но здесь предмет глубже. Они просто еще не сломали сопротивление юзеров в самом очевидном, в том что 0/0=0. Во всем остальном давно сломали. Пишут как доктора или как юристы в своей погроммистской логике, другого нет, юзеру приходится изворачиваться, приспосабливаться, и ему уже даже нравится выполнять текстовые команды раскиданные по менюхам и он уже называет это графический интерфейс.

Погроммисты делают свою культуру.
Ответить с цитированием
  #29 (permalink)  
Старый 26.09.2016, 05:07
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Причем если даже погроммиста наказать приковав к своему детищу цепями, как к веслам на галере, он нисколько не огорчится, ему нормально когда все через жопу, не для людей. И сравнить нельзя. Возьмем программу для людей, прикуем к ней программиста, он сделает за отчетный период в ней больше и лучше и скажут - ну вот, этот программист просто лучше. Не скажут же - потому что его культура гуманная, а не техническая. Просто его техника лучше.
Ответить с цитированием
  #30 (permalink)  
Старый 26.09.2016, 05:13
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Грань между профанацией и гуманизмом весьма тонкая и неуловимая. Под давлением охреневшего заказчика не могущего понять, отчего клиенты не жалуют, погроммист может нахерачить свистелок и перделок типа гуманных, типа прокрустова ложа для ввода номера телефона, а бизнес-логику реализовать в сугубо техническом жанре. Скочет как сантехник в стеклянных бусах, а чо, красиво же. Лол.

Последний раз редактировалось warren buffet, 26.09.2016 в 05:25.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
typeof возвращает значение undefied у строки,которая содержится в ячейке таблицы Misterdark Events/DOM/Window 8 16.04.2016 08:03
Уточненное определение типа объекта - typeOf _0_ Ваши сайты и скрипты 4 01.09.2014 17:12
Пожалуйста, кому не лень, посмотрите код, что он примерно делает?? arsen97 Общие вопросы Javascript 1 15.08.2014 16:51
Кроссбраузерная обертка AttachEvent Dim@ Ваши сайты и скрипты 13 21.08.2012 21:21
Javascript quiz · Perfection kills Octane Оффтопик 49 16.02.2010 12:46