It is not enough to define isapprox(string, string). To use isapprox for [1.5, "foo"] you need an isapprox method for Array{Any}.
However, I would be inclined to say you should re-consider using isapprox in such cases. (What does it mean for two strings to be "approximately" equal?) Note that isapprox on two numeric arrays is *not* the same as elementwise isapprox. So it's not necessarily a good idea to have a fallback method isapprox(a::Array, b::Array) = mapreduce(ab -> isapprox(ab[1], ab[2]), &, true, zip(a,b))