Я проверял этот вопрос Javascript Deep Comparison Решение вопроса Аскер не убедит меня, так что я попытался проанализировать проблему и придумал, чтоJavascript: Deep Сравнение
var obj = {here: 2};
console.log(deepEqual(obj, obj));
// → true
console.log(deepEqual(obj, {here: 1}));
// → false
console.log(deepEqual(obj, {here: 2}));
// → true
function deepEqual(a,b)
{
if((typeof a == 'object' && a != null) &&
(typeof b == 'object' && b != null))
{
var count = [0,0];
for(var key in a) count[0]++;
for(var key in b) count[1]++;
if(count[0]-count[1] != 0) {console.log('1');return false;}
for(var key in a)
{
if(!(key in b) || !deepEqual(a[key],b[key])) {console.log('2');return false;}
}
for(var key in b)
{
if(!(key in a) || !deepEqual(b[key],a[key])) {console.log('3');return false;}
}
}
console.log('a:'+a+' b:'+b);
return a===b;
}
obj === { here:2 }
Этот код не последнее испытание (console.log (deepEqual (obj, {here: 2}))), но логика рассмотрения объектов, глубоко равных, если они имеют равные ключи и значения, несмотря на то, что они разные экземпляры в памяти, не убеждает меня. Есть ли проблема с моим «решением» или ошибка заключается в презумпции упражнения? Является ли код, упомянутый в вопросе, который я связывал, действительным?
Ресурсы, которые hikinthru забыл упомянуть (http://eloquentjavascript.net/04_data.html#exercise_deep_compare)
Неясно, что вы просите. Вы говорите, что не согласны с тем, что должно означать глубокое равенство? –
Это часть того, что я прошу. Является ли мое защищенное решение неправильным или есть проблема с вопросом? Последняя строка показывает, что для браузеров даже объекты с одинаковыми клавишами и их значения не являются строго равными. Если у вас возникнут проблемы с вопросом, дайте мне знать, и я удалю его. – zenwaichi
Ну, ваша функция никогда не возвращает true, установив, что оба объекта имеют одинаковые свойства ... – Bergi