en.javascript.info/1-js/6-objects-more/2-object-conversion/3-compare-empty-arrays/solution.md
2015-01-14 10:23:45 +03:00

1.4 KiB
Raw Blame History

Ответ по первому равенству

Два объекта равны только тогда, когда это один и тот же объект.

В первом равенстве создаются два массива, это разные объекты, так что они неравны.

Ответ по второму равенству

  1. Первым делом, обе части сравнения вычисляются. Справа находится `![]`. Логическое НЕ `'!'` преобразует аргумент к логическому типу. Массив является объектом, так что это `true`. Значит, правая часть становится `![] = !true = false`. Так что получили:
    alert( [] == false );
    
  2. Проверка равенства между объектом и примитивом вызывает численное преобразование объекта.

    У массива нет valueOf, сработает toString и преобразует массив в список элементов, то есть - в пустую строку:

    alert( '' == false );
    
  3. Сравнение различных типов вызывает численное преобразование слева и справа:
    alert( 0 == 0 );
    

    Теперь результат очевиден.