4.1 KiB
title | localeTitle |
---|---|
Equality Vs Identity Operator | Оператор идентификации равенства 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: Хорошие части» предполагает, что === следует использовать везде, а не ==, чтобы избежать потенциальных ошибок. В большинстве случаев вам следует следовать этому совету, если вы специально не хотите использовать автоматическое преобразование типов.