function ergodic(obj,indentation){
var indent = " " indentation;
if(obj.constructor == Array || obj.constructor == Object){
for(var p in obj){
if(obj[p].constructor == Array|| obj[p].constructor == Object){
console.log(indent "[" p "] => " typeof(obj) "");
console.log(indent "{");
ergodic(obj[p], indent);
console.log(indent "}");
} else if (obj[p].constructor == String) {
console.log(indent "[" p "] => '" obj[p] "'");
} else {
console.log(indent "[" p "] => " obj[p] "");
}
}
}
}
function print_r(obj) {
console.log("{")
ergodic(obj, "");
console.log("}")
}
var stu = {'name':'Alan','grade':{'Chinese':120,'math':130,'competition':{'NOI':'First prize'}}};
print_r(stu);