index.js 979 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. //
  2. module.exports = function shallowEqual(objA, objB, compare, compareContext) {
  3. var ret = compare ? compare.call(compareContext, objA, objB) : void 0;
  4. if (ret !== void 0) {
  5. return !!ret;
  6. }
  7. if (objA === objB) {
  8. return true;
  9. }
  10. if (typeof objA !== "object" || !objA || typeof objB !== "object" || !objB) {
  11. return false;
  12. }
  13. var keysA = Object.keys(objA);
  14. var keysB = Object.keys(objB);
  15. if (keysA.length !== keysB.length) {
  16. return false;
  17. }
  18. var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);
  19. // Test for A's keys different from B.
  20. for (var idx = 0; idx < keysA.length; idx++) {
  21. var key = keysA[idx];
  22. if (!bHasOwnProperty(key)) {
  23. return false;
  24. }
  25. var valueA = objA[key];
  26. var valueB = objB[key];
  27. ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;
  28. if (ret === false || (ret === void 0 && valueA !== valueB)) {
  29. return false;
  30. }
  31. }
  32. return true;
  33. };