You need to use get to obtain the value rather than the character name of the object as returned by ls:
x <- 1L
typeof(ls())
[1] "character"
typeof(get(ls()))
[1] "integer"
Alternatively, for the problem as presented you might want to use eapply:
eapply(.GlobalEnv,typeof)
$x
[1] "integer"
$a
[1] "double"
$b
[1] "character"
$c
[1] "list"