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

52 lines
4.1 KiB
Markdown
Raw Normal View History

2018-10-12 20:00:59 +00:00
---
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: Хорошие части»_ предполагает, что _\===_ следует использовать везде, а не _\==,_ чтобы избежать потенциальных ошибок. В большинстве случаев вам следует следовать этому совету, если вы специально не хотите использовать автоматическое преобразование типов.