Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   проверка типов (https://javascript.ru/forum/misc/48831-proverka-tipov.html)

newobject 18.07.2014 15:16

проверка типов
 
Чет я тут подумал, проверку типов в js можно делать гораздо проще, чем это обычно делается, например, через тайпов и пр. Можно делать вот так например:

String.prototype.str=true
types={
str: "foo",
arr: [],
ob: {},
fu: function(){},
__proto__: null
}

for(i in types){
	console.log(i+": "+types[i].str)
}

tst=function(arg){
	if(arg.str) return eval(arg); return arg()
}

tst("console.log('foo')")
tst(function(){console.log("bar")})


//str: true
//arr: undefined
//ob: undefined
//fu: undefined
//foo
//bar

skrudjmakdak 18.07.2014 15:25

я вот сижу пытаюсь вникнуть, что этот код делает, не получается))

newobject 18.07.2014 15:30

Цитата:

Сообщение от skrudjmakdak
я вот сижу пытаюсь вникнуть, что этот код делает, не получается))

Ну, сначала мы расширяем прототип String, затем, определил объект для проверки, с разными типами. При итерации этого объекта, выводится типа тип -- если объект имеет свойство, str -- возврат тру. А последние 2 вызова ф-ии -- это пример использования.

skrudjmakdak 18.07.2014 15:40

для того чтобы узнать тип переменной, то достаточно написать:
console.log(typeof "my string");

я вашу логику не пойму. где это пригодится

newobject 18.07.2014 15:42

ну, к примеру для массивов, также свои типы можно определять, да и вообще, так изящней, и соответствует духу js:)

skrudjmakdak 18.07.2014 15:47

я твое изящество никак не могу вкусить :(
может более подробнее развернешь?? так сказать по больше примеров?

newobject 18.07.2014 15:48

skrudjmakdak,
Или можно смешанные типы, например, вместо function(arg){if(typeof arg==="foo"||typeof arg==="bar"){dostuff}}, function(arg){if(arg.foo) dostuff}

skrudjmakdak 18.07.2014 15:59

newobject, ты случайно не троль? а? земля должна стать квадратной чтобы это typeof arg==="foo" выполнилось

newobject 18.07.2014 16:02

skrudjmakdak,
ес-нно там напр "string". Ты на мелочи отвлекаешься, масштабней надо смотреть:)

skrudjmakdak 18.07.2014 16:05

Цитата:

Сообщение от newobject (Сообщение 321675)
Ты на мелочи отвлекаешься

это далеко не мелочи :)


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