Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Hедопонимание с typeof (https://javascript.ru/forum/misc/65024-hedoponimanie-s-typeof.html)

warren buffet 25.09.2016 21:07

Вот смотри сколько геморроя. Там просто 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:12

Цитата:

Сообщение от Rise
это для программистской логики

var_dump() для программистской логики. )))

warren buffet 25.09.2016 21:31

Прикол, отпостил эту хрень и косяк нашел. for(var id in this.cart) - вот еще подстава с этими this. Не должно работать, а работает, потому что забыл var тут try{cart=JSON.parse(c);} и все срослось. )

warren buffet 25.09.2016 22:22

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

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

Я понимаю, что юзер чинить куки не полезет, но туда может записаться какая угодно хрень теоретически.

Rasy 25.09.2016 23:16

ochen,
Лучшее объяснение я прочитал в книге от орэйли. NaN используется для представления числового результата не имеющего представление.
Т.е деление 0/0 мы представить можем, но результат уже не в состоянии срендерить, если только ты не просветленный дзен-мастер.

Aetae 25.09.2016 23:19

Цитата:

Сообщение от warren buffet (Сообщение 429825)
Rise, а если нету cart[id].ap?

Значит undefined, значит isNaN -> true.
Цитата:

Сообщение от warren buffet (Сообщение 429825)
Или если там -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.

warren buffet 26.09.2016 04:44

Цитата:

Сообщение от Aetae
регулярка

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

Цитата:

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

Я несколько раз смотрел как написаны isset's на js и каждый раз посмотрев закрывал в печали. Там кошмар.

warren buffet 26.09.2016 05:00

Цитата:

Сообщение от Rasy
дзен-мастер.

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

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

Погроммисты делают свою культуру.

warren buffet 26.09.2016 05:07

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

warren buffet 26.09.2016 05:13

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


Часовой пояс GMT +3, время: 22:11.