Функция глубокого сравнения

Добрый день.
Нужна помощь.
Нужно написать функцию глубокого сравнения. Сравниваться должны значения всех типов и любой уровень вложенности, написана на ЕS5. Могу использовать только рекурсию.

Мы не даем готовых ответов. А помогаем разобраться и научиться. В чем затык? Что уже пробовал сделать? Пока код который есть

function checkObject(obj1, obj2) {
    if(typeof obj1 == typeof obj1) {
        if(typeof obj1 == "object" && obj1 != null) {
            var equal = true;
            for(var key in obj1) {
                if(obj1.hasOwnProperty(key) && obj2.hasOwnProperty(key)) {
                    if(!checkObject(obj1[key], obj2[key])) {
                        equal = false;
                    }
                } else {
                    equal = false;
                }
            }
            return equal;
        } else {
            return obj1 === obj2;
        }
    } else {
        return false;
    }
}
//Проверка:
var obj = {these: {name: 'Vasya', boolean: true}, object: 2};

console.log(checkObject(obj, obj));
console.log(checkObject(obj, {these: 10, object: 20, object2: 4}));
console.log(checkObject(obj, {these: {name: 'Vasya', boolean: true}, object: 2}));
//Мне не хватает проверки массива.

Верное направление мышления. Спасибо что поделился прогрессом.

Ты разобрался с вопросом или еще что-то осталось неясным?

Проверку на массив добавить надо))) не знаю как)

function isArray(val) {
	return Object.prototype.toString.call(val) === '[object Array]'
}

Реализация выглядет странно. Но это издревле работающий прием для определения типа объекта. В es5.1 еще есть статический метод класса Array.isArray.

Один из главных недостатков большинства реализаций — это отсутствие проверки объектов на цикличность. Иначе рекурсия закончится ошибкой.