у меня есть массив
let arr = []
Я вставляю в него объект
let a = {name:"a", age: 20}
arr.push(a);
Я проверяю индекс ниже с тем же объектом, назначенным другой переменной
let b = {name:"a", age:20}
Я старался
arr.indexOf(b);
Я получаю -1, я ожидаю 0.
Пожалуйста, направь меня



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


JS выполняет сравнение объектов (и поиск) по ссылке, а не по значению. Следовательно: чтобы foo == bar было истинным, foo и bar должны быть одним и тем же объектом, а не просто объектом с одинаковыми свойствами и значениями:
console.info({name:"a", age:20} == {name:"a", age:20});Следовательно, вместо indexOf вам нужно что-то вроде findIndex.
let arr = [];
let a = {name:"a", age: 20};
arr.push(a);
let b = {name:"a", age:20}
const index = arr.findIndex(item => item.name === b.name && item.age === b.age);
console.info(index);Принцип верен как для ==, так и для ===.
Это связано с тем, что объекты являются ссылочными, переменные a и b указывают на две разные области памяти. Таким образом a != b
let a = {name:"a", age: 20};
let b = {name:"a", age:20}
console.info(a == b);JavaScript не может сравнивать объекты по умолчанию. Вместо этого используйте Array.findIndex:
let arr = []
let a = {name:"a", age: 20}
arr.push(a);
let b = {name:"a", age:20}
console.info(arr.findIndex(elem => elem.name == b.name && elem.age == b.age));Да, потому что Js сравнивает по ссылке, а не по значению
let arr = [];
let a = {
name: "a",
age: 20
};
arr.push(a);
let b = {
name: "a",
age: 20
};
console.info(arr.indexOf(b));let arr = [];
let a = {
name: "a",
age: 20
};
arr.push(a);
let b = a
console.info(arr.indexOf(b));
indexOf использует
===, а не==приятель