Рекурсивный перебор вложенных объектов на JavaScript

Рекурсивный перебор вложенных объектов на JavaScript и проверка на целочисленное значение

JavaScript

var fractal = {
    a1: {
        b1: {
            c: 1
        },
        b2: {
            c: 222
        },
        b3: {
            c: {
                d: 33,
                e: 2.5,
                f: {
                    g: 9999,
                    h: {
                        i: {
                            j: 1001,
                            k: 'строка',
                            l: [1,2,3],
                            m: function() {}
                        }
                    }
                }
            }
        }
    }
}

fractal.a1.b2.m = fractal.a1.b2;

getFiniteValue(fractal);

function getFiniteValue(obj) {
	var handledFlag = 'temp__isAlreadyHandled__';

	getProp(obj);
    	
    function getProp(o, stack) {
        var propertyPath;

        for(var prop in o) {
            if(typeof(o[prop]) === 'object') {
                if(!o[prop][handledFlag]) {
                    Object.defineProperty(o[prop],handledFlag, {
                        value: true,
                        writable:false,
                        configurable: true
                    });

                    if(!stack)
                        propertyPath = 'rootObject.' + prop
                    else
                        propertyPath = stack + '.' + prop;
                    getProp(o[prop], propertyPath);
                } else {
                    propertyPath = stack + '.' + prop;
                    document.write('<span style="color:red">Циклическая ссылка. Свойство: ' + propertyPath+'</span><br>');
                }
                delete o[prop][handledFlag]
            } else if(typeof(o[prop]) === 'number' && isInteger(o[prop])) {
                document.write('Integer: '+o[prop]+' '+ isInteger(o[prop])+'<br>');
            }
        }
    }

    function isInteger(num) {
        return (num ^ 0) === num;
    }
}