Skip to content

Commit a9a65b0

Browse files
authored
add missing information to article
1 parent ca500b9 commit a9a65b0

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

1-js/05-data-types/04-array/article.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,45 @@ alert( "1,2" + 1 ); // "1,21"
466466

467467
Давайте еще раз напомним правила:
468468

469+
- Два объекта равны друг другу `==` только в том случае, если они ссылаются на один и тот же объект.
470+
- Если один из аргументов `==` является объектом, а другой - примитивом, то объект преобразуется в примитив, как описано в главе <info:object-toprimitive>.
471+
- ...За исключением `null` и `undefined`, которые равны `==` друг другу и ничему больше.
472+
473+
Оператор строгого равенства `===` еще проще, так как он не преобразует типы.
474+
475+
Итак, если мы всё же сравниваем массивы с помощью `==`, то они никогда не будут одинаковыми, если только мы не сравним две переменные, которые ссылаются на один и тот же массив
476+
477+
Например:
478+
```js run
479+
alert( [] == [] ); // false
480+
alert( [0] == [0] ); // false
481+
```
482+
483+
Технически эти массивы являются разным объектами. Так что они не равны. Оператор `==` не выполняет поэлементное сравнение.
484+
485+
Сравнение с примитивами также может дать, казалось бы, странные результаты:
486+
487+
```js run
488+
alert( 0 == [] ); // true
489+
alert('0' == [] ); // false
490+
```
491+
492+
Здесь, в обоих случаях, мы сравниваем примитив с объектом массива. Таким образом, массив `[]` преобразуется в примитив с целью сравнения и становится пустой строкой `''`.
493+
494+
Затем продолжается процесс сравнения с примитивами, как описано в главе <info:type-conversions>:
495+
496+
```js run
497+
// после того, как [] был преобразован в ''
498+
alert( 0 == '' ); // true, так как '' преобразуется в число 0
499+
500+
alert('0' == '' ); // false, нет преобразования типов, разные строки
501+
```
502+
503+
Так как же сравнить массивы?
504+
505+
Это просто: не используйте оператор `==`. Вместо этого сравните их поэлементам в цикле или используя методы итерации, описанные в следующей главе.
506+
507+
469508
## Итого
470509

471510
Массив – это особый тип объекта, предназначенный для работы с упорядоченным набором элементов.

0 commit comments

Comments
 (0)