Реагируйте сравнение реквизита: "_.isEqual" против "===" - PullRequest
0 голосов
/ 02 мая 2018

Моя проблема в том, что глубокое сравнение lodash равенства и строгого равенства === возвращает разные значения при сравнении полей nextProps и self.props в методе жизненного цикла componentWillReceiveProps.

  1. Значит ли это, что значения этих свойств должны быть разных типов? Я предполагаю, что _.isEqual выполняет преобразование типов для сравнения равенства, поскольку === не делает.
  2. Рекомендуется ли использовать _.isEqual при проверке равенства между полями nextProps и self.props?

Вот мой конкретный пример -

componentWillReceiveProps(nextProps){
  (nextProps.obj === self.props.obj);        // false
   _.isEqual(nextProps.obj, self.props.obj); // true

   typeof(nextProps.obj);  // object
   typeof(self.props.obj); // object

   nextProps.obj;   // { k1: "v1", k2: "v2", k3: "v3" }
   self.props.obj;  // { k1: "v1", k2: "v2", k3: "v3" }
}

Кто-нибудь знает, что может происходить?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

_. IsEquals :

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

Lodash _.isEquals

Пример:

var object = { 'a': 1 };
var other = { 'a': 1 };
 
console.log(_.isEqual(object, other));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>

=== :

Для строгого равенства сравниваемые объекты должны иметь одинаковый тип и:

сравниваемый должен иметь тот же тип и:

  • Две строки строго равны, если они имеют одинаковую последовательность символы одинаковой длины и одинаковые символы в соответствующих позициях.
  • Два числа строго равны, когда они численно равны такое же числовое значение). NaN не равно всему, в том числе NaN. Положительные и отрицательные нули равны друг другу.
  • Два булевых операнда строго равны, если оба истинны или оба ложные.
  • Два объекта строго равны, если они ссылаются на один и тот же объект

Операторы сравнения - MDC

Пример:

var object = { 'a': 1 };
var other = { 'a': 1 };
 
 
console.log(object === other);
// => false
0 голосов
/ 02 мая 2018

В javascript, когда вы используете '===' для сравнения объектов, он вернет true, только если это тот же объект, тогда как _.isEqual вернет true, если объект эквивалентен.

Что касается вашего фактического вопроса, я думаю, вы должны использовать _.isEqual, чтобы сравнить 2 объекта, чтобы увидеть, являются ли они точной копией друг друга.

Подробнее см .: https://lodash.com/docs#isEqual

...