MCPcopy Index your code
hub / github.com/nodejs/node / objectComparisonStart

Function objectComparisonStart

lib/internal/util/comparisons.js:282–456  ·  view source on GitHub ↗
(val1, val2, mode, memos)

Source from the content-addressed store, hash-verified

280}
281
282function objectComparisonStart(val1, val2, mode, memos) {
283 if (mode === kStrict) {
284 if (wellKnownConstructors.has(val1.constructor) ||
285 (val1.constructor !== undefined && !hasOwn(val1, 'constructor'))) {
286 if (val1.constructor !== val2.constructor) {
287 return false;
288 }
289 } else if (ObjectGetPrototypeOf(val1) !== ObjectGetPrototypeOf(val2)) {
290 return false;
291 }
292 }
293
294 if (ArrayIsArray(val1)) {
295 if (!ArrayIsArray(val2) ||
296 (val1.length !== val2.length && (mode !== kPartial || val1.length < val2.length)) ||
297 hasUnequalTag(val1, val2)) {
298 return false;
299 }
300
301 const filter = mode !== kLoose ? ONLY_ENUMERABLE : ONLY_ENUMERABLE | SKIP_SYMBOLS;
302 const keys2 = getOwnNonIndexProperties(val2, filter);
303 if (mode !== kPartial &&
304 keys2.length !== getOwnNonIndexProperties(val1, filter).length) {
305 return false;
306 }
307 return keyCheck(val1, val2, mode, memos, kIsArray, keys2);
308 }
309
310 let val1Tag;
311 if (val1[SymbolToStringTag] === undefined &&
312 (val1Tag = ObjectPrototypeToString(val1)) === '[object Object]') {
313 if (slowHasUnequalTag(val1Tag, val1, val2)) {
314 return false;
315 }
316 return keyCheck(val1, val2, mode, memos, kNoIterator);
317 } else if (isSet(val1)) {
318 if (!isSet(val2) ||
319 (val1.size !== val2.size && (mode !== kPartial || val1.size < val2.size)) ||
320 hasUnequalTag(val1, val2)) {
321 return false;
322 }
323 return keyCheck(val1, val2, mode, memos, kIsSet);
324 } else if (isMap(val1)) {
325 if (!isMap(val2) ||
326 (val1.size !== val2.size && (mode !== kPartial || val1.size < val2.size)) ||
327 hasUnequalTag(val1, val2)) {
328 return false;
329 }
330 return keyCheck(val1, val2, mode, memos, kIsMap);
331 } else if (isArrayBufferView(val1)) {
332 if (TypedArrayPrototypeGetSymbolToStringTag(val1) !==
333 TypedArrayPrototypeGetSymbolToStringTag(val2)) {
334 return false;
335 }
336 if (mode === kPartial && val1.byteLength !== val2.byteLength) {
337 if (!isPartialArrayBufferView(val1, val2)) {
338 return false;
339 }

Callers 2

innerDeepEqualFunction · 0.85
partialObjectMapEquivFunction · 0.85

Calls 15

hasUnequalTagFunction · 0.85
keyCheckFunction · 0.85
slowHasUnequalTagFunction · 0.85
isSetFunction · 0.85
isPartialArrayBufferViewFunction · 0.85
isFloat32ArrayFunction · 0.85
isFloat64ArrayFunction · 0.85
isFloat16ArrayFunction · 0.85
areSimilarFloatArraysFunction · 0.85
areSimilarTypedArraysFunction · 0.85
areSimilarRegExpsFunction · 0.85
areEqualArrayBuffersFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…