Ожидаем равенства Карт, но результат будет другим - PullRequest
0 голосов
/ 02 ноября 2019

Справочная информация:

Я новичок в машинописи и пытаюсь работать с картой. У меня есть вопрос о равенстве карт. Я искал его, но не обнаружил.

Проблема:

Я создал две простые Карты в TypeScript 3.5.1 и попытался использовать ===Оператор, чтобы увидеть, они равны или нет, но результат для меня странный.

Код:

const myMap1: Map<string, number> = new Map([['a', 1]]);
const myMap2: Map<string, number> = new Map().set('a', 1);
console.log(myMap1 === myMap2);
// console output => false

Где:

Я запустил этот код в:

https://typescript -play.js.org / # code

Вы можете увидеть мой код здесь:

https://typescript -play.js.org / # код / ​​MYewdgzgLgBAtgTwLIEMAOBGAXDVaA80ATgJZgDmANDGAK5wBGApkQHwwC8NTA7rugAoA2kIDkKUdQwBdaQEoA3AChQkWIjwAmHHkJRSFanUYt2XML35oBcgHQQmUAeMkwMileAggANk1s + IOQCGugYnBxcoWiaHgD0cTCq3n4wILRQaBmc7ABmKD4OQA

1035 * Результат: 1039 * ложь 1041 * Ожидаемый:

true

Вопрос: Почему эти две карты отличаются?

1 Ответ

2 голосов
/ 02 ноября 2019

=== с двумя объектами (включая две карты) выполняет проверку на равенство ссылок. Другими словами, он видит, являются ли два объекта буквально одним и тем же объектом. Он не проверяет, что они содержат, чтобы увидеть, все ли их свойства одинаковы.

const a = new Map();
const a2 = a;
const b = new Map();
console.log(a === a2); // true
console.log(a === b); // false

const c = {};
const c2 = c;
const d = {};
console.log(c === c2); // true
console.log(c === d); // false

Если вы хотите проверить, является ли содержимое двух карт одинаковым, вам нужно реализовать это самостоятельно, а также вам необходимо решить, что считатькак равныйДолжны ли они быть в одинаковом порядке на обеих картах? Это будет иметь другую реализацию, чем если бы порядок не имел значения.

...