freeCodeCamp/guide/russian/miscellaneous/equality-vs-identity-operator/index.md

52 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Equality Vs Identity Operator
localeTitle: Оператор идентификации равенства Vs
---
В JavaScript есть два оператора, которые могут использоваться для сравнения двух значений: _\==_ и _\===_ . Они кажутся точно такими же, но они работают по-разному, и в некоторых случаях они будут давать разные результаты.
## Оператор акций
Оператор равенства (==) сравнивает два значения после всех необходимых преобразований типов. Давайте рассмотрим несколько примеров:
```
0 == '' // -> true
false == 'false' // -> false
```
В первом примере и 0, и '' (пустая строка) подвергаются автоматическому преобразованию. Они оба преобразуются в ложное предоставление:
```
false == false
```
Это, очевидно, ерно_ . Во втором примере _«false»_ непустая строка оценивается как true, делая все выражение ложным.
## Оператор идентификации
Для сравнения, оператор идентичности (===) вернет true тогда и только тогда, когда оба сравниваемых значения имеют один и тот же тип и имеют одинаковое значение. Если мы попытаемся сравнить значения двух разных типов, он всегда будет возвращать _false_ .
```
false === 0 // -> false
0 === '' // -> false
5 === 5 // -> true
```
Если быть точным, === проверяет, ссылаются ли две переменные на один и тот же объект или в случае типов значений (например, _int_ , _double_ , _String_ , _bool_ и т. Д.), Если оба они имеют одинаковое значение.
```
var array1 = [ 5, 6, 7 ];
var array2 = [ 5, 6, 7 ];
var array3 = array2;
array1 === array2 // -> false
array1 == array2 // -> false
array2 === array3 // -> true
array2 == array3 // -> true
```
И _array1,_ и _array2_ имеют одинаковый тип, и они равны, но ассив_ сравнения1 _\=== array2_ возвращает false, поскольку они ссылаются на разные объекты. _array2 === array3_ возвращает true, поскольку обе переменные относятся к одному и тому же объекту.
## Какому оператору я должен пользоваться?
Важно понимать разницу между _\==_ и _\===,_ но какой оператор следует использовать?
При использовании _\==_ оператор JavaScript выполнит все преобразования, необходимые для сравнения двух значений. Кажется, что это действительно удобно, но последствия этого преобразования могут быть запутывающими и вызывать очень сложную задачу отслеживания ошибок.
Дуглас Крокфорд, автор книги « _JavaScript: Хорошие части»_ предполагает, что _\===_ следует использовать везде, а не _\==,_ чтобы избежать потенциальных ошибок. В большинстве случаев вам следует следовать этому совету, если вы специально не хотите использовать автоматическое преобразование типов.