-
Notifications
You must be signed in to change notification settings - Fork 0
/
typeOf.coffee
71 lines (62 loc) · 1.21 KB
/
typeOf.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
class Animal
constructor: (@name) ->
return @name
Person = ->
return "Tom"
### class typeOf START ###
class typeOf
constructor: (@value) ->
if @value == null then return "[object Null]"
if @value == undefined or typeof @value == "undefined" then return "[object Undefined]"
getClass = toClass(@value)
if getClass == "[object annonymous]" then return @value
return getClass
toClass = (@value)-> (
str = {}.toString.call(@value)
switch str
when "[object Function]" then return ( (obj)->
name = obj.name || "Annonymous"
return "[object #{name}]"
)(@value)
when "[object Object]" then return ( (obj)->
name = obj.constructor.name || "Annonymous"
"[class #{name}]"
)(@value)
else str
)
### class typeOf END ###
list = [
""
new String("")
NaN
0
Infinity
-1
new Number("2")
"2"
true
null
undefined
[]
new Array
Array()
{}
new Object()
->
typeOf("")
new typeOf()
new Date()
new Animal("Ben")
new Animal()
Animal()
Animal("ben")
Animal
new Person()
Person()
Person
]
####
for item in list
console.log(typeOf(item) , "\t\t\t :: \t\t\t", item )
###
console.log typeOf Animal()