Вход

Просмотр полной версии : проверка типов


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
я вот сижу пытаюсь вникнуть, что этот код делает, не получается))
Ну, сначала мы расширяем прототип 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
18.07.2014, 16:11
skrudjmakdak,
Тебе видней.

Erolast
18.07.2014, 17:04
Плохо то, что возвращается undefined вместо false. Нет, конечно, undefined при сравнении к false приводится, но тем не менее. Если уж так не хочется писать лишние буквы при typeof - лучше сделать функции is_string, is_number, is_array etc.