Какова цель сравнения двух объектов?(в отличие от примитивов) - PullRequest
0 голосов
/ 02 июня 2019

В настоящее время я изучаю Javascript (я знаком с C # и Python), и в настоящее время в учебнике, который я читаю, обсуждается сравнение между двумя объектами. В коде, который я сделал (у меня были разные проекты), такого рода вещи никогда не были нужны. Учитывая, что это может быть важно для будущего, я подумал, что я буду искать, когда / где использовать сравнение объектов, но все, что я могу найти, это вопросы / ответы по , как работает, а не , почему вы должны использовать это и когда. Я не могу вспомнить ни одной ситуации, когда сравнение между примитивами было бы не лучшим, поэтому любая помощь в этой области была бы признательна.

Ответы [ 2 ]

0 голосов
/ 02 июня 2019

Опасаясь кругового спора, вы используете его, когда вам это нужно. : -)

Я бы сказал, что это примерно так же, как в C #. В обоих случаях, когда вы используете оператор равенства, он проверяет, являются ли они одним и тем же объектом (а не отдельными, но эквивалентными объектами).

Например, предположим, у вас есть массив объектов, и содержимое этого массива может измениться. Позже у вас есть объект, который вы должны удалить. Вы бы сравнили объект, который нужно удалить, с объектами в массиве, чтобы увидеть, нужно ли его удалять (часто в операции filter):

arrayOfObjects = arrayOfObjects.filter(obj => obj !== objToRemove);
0 голосов
/ 02 июня 2019

Вы бы использовали его, когда у вас есть две переменные, которые ссылаются на объекты, и вы хотите увидеть, ссылаются ли они на один и тот же объект. Например, с объектом window вы можете сделать

if (window !== window.top) {
  console.log('This script must be running in an iframe!');
}

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

Многие объекты (включая window) не могут быть легко преобразованы в уникальный примитив.

Вы можете использовать JSON.stringify для преобразования простого объекта в строку, а затем сравнить эти строки, но это не поможет вам сравнить, являются ли объекты фактически одним и тем же объектом в памяти :

const obj1 = { prop: 'val' };
const obj2 = { prop: 'val' };
// They are not the same object
console.log(obj1 === obj2);
// But if you convert them to a primitive string first, you won't be able to tell
console.log(JSON.stringify(obj1) === JSON.stringify(obj2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...