Anyone working with JavaScript who doesn't have the benefit of the free and excellent Firebug extension for Firefox may find this function useful - it produces a string containing the names and values of all the properties of an object, which can be helpful when debugging.
function print(obj, maxDepth, prefix){ var result = ''; if (!prefix) prefix=''; for(var key in obj){ if (typeof obj[key] == 'object'){ if (maxDepth !== undefined && maxDepth <= 1){ result += (prefix + key + '=object [max depth reached]\n'); } else { result += print(obj[key], (maxDepth) ? maxDepth - 1: maxDepth, prefix + key + '.'); } } else { result += (prefix + key + '=' + obj[key] + '\n'); } } return result; }
The function is recursive, so if the object contains other objects those will be printed as well - recursion will continue down to the depth specified by the 'maxDepth' argument, or indefinitely if no maxDepth is specified; array elements are also displayed. In the example below the 'myObject' object has 4 properties - a string, a number, an array, and an object:
var myObject = { 'name' : 'rob', 'age' : 36, 'languages' : ['java', 'javascript', 'c#'], 'location' : { 'country' : 'uk', 'city' : 'manchester', 'area' : 'chorlton' } }; ... alert(print(myObject));
The 'alert' will display the following output:
name=rob age=36 languages.0=java languages.1=javascript languages.2=c# location.country=uk location.city=manchester location.area=chorlton
It is also possible to replace the default 'toString' method provided by JavaScript (which would just display '[object Object]') with the print() function shown above, by using the following line:
Object.prototype.toString = function(){ return print(this) };