Равенство¶
Первое, с чем нужно быть осторожным в JavaScript, это разница между == и ===. Поскольку JavaScript пытается быть устойчивым к ошибкам программирования, == пытается сделать приведение типов между двумя переменными, т.е. конвертирует строку в число так, чтобы вы могли произвести сравнение с числом как показано ниже:
1 2 | |
Тем не менее, выбор, который делает JavaScript не всегда идеален. В примере ниже первое выражение ложно, потому что "" и "0" являются строками и очевидно не равны. Но во втором примере 0 и пустая строка ("") ложные (то есть ведут себя как false) и, следовательно, равны в соответствии с ==. Оба выражения ложны, если вы используете ===.
1 2 3 4 5 | |
Обратите внимание, что string == number и string === number являются ошибками компиляции в TypeScript, поэтому, как правило, вам не нужно об этом беспокоиться.
По аналогии с == и ===, существует != против !==.
Поэтому совет профессионала: всегда используйте === и !==, кроме проверки на null, о которой мы расскажем позже.
Структурное равенство¶
Если вы хотите сравнить два объекта на структурное равенство, то использовать ==/=== недостаточно, то есть:
1 2 | |
Чтобы делать такие проверки, используйте пакет deep-equal:
1 2 3 | |
Тем не менее, довольно часто вам не нужна глубокая проверка, а всё, что вам на самом деле нужно, это проверка по какому-нибудь id:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |