This commit is contained in:
Ilya Kantor 2014-11-16 01:40:20 +03:00
parent 962caebbb7
commit 87bf53d076
1825 changed files with 94929 additions and 0 deletions

View file

@ -0,0 +1,34 @@
# Ответ по первому равенству
Два объекта равны только тогда, когда это один и тот же объект.
В первом равенстве создаются два массива, это разные объекты, так что они неравны.
# Ответ по второму равенству
<ol>
<li>Первым делом, обе части сравнения вычисляются. Справа находится `![]`. Логическое НЕ `'!'` преобразует аргумент к логическому типу. Массив является объектом, так что это `true`. Значит, правая часть становится `![] = !true = false`. Так что получили:
```js
alert( [] == false );
```
</li>
<li>Проверка равенства между объектом и примитивом вызывает численное преобразование объекта.
У массива нет `valueOf`, сработает `toString` и преобразует массив в список элементов, то есть - в пустую строку:
```js
alert( '' == false );
```
</li>
<li>Сравнение различных типов вызывает численное преобразование слева и справа:
```js
alert( 0 == 0 );
```
Теперь результат очевиден.
</li>
</ol>

View file

@ -0,0 +1,13 @@
# Почему [] == [] неверно, а [ ] == ![ ] верно?
[importance 5]
Почему первое равенство -- неверно, а второе -- верно?
```js
//+ run
alert( [] == [] ); // false
alert( [] == ![] ); // true
```
Какие преобразования происходят при вычислении?