32 lines
1.0 KiB
TypeScript
32 lines
1.0 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
import {areIterablesEqual, isListLikeIterable} from './iterable';
|
|
|
|
|
|
// JS has NaN !== NaN
|
|
export function looseIdentical(a: any, b: any): boolean {
|
|
return a === b || typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b);
|
|
}
|
|
|
|
export function devModeEqual(a: any, b: any): boolean {
|
|
const isListLikeIterableA = isListLikeIterable(a);
|
|
const isListLikeIterableB = isListLikeIterable(b);
|
|
if (isListLikeIterableA && isListLikeIterableB) {
|
|
return areIterablesEqual(a, b, devModeEqual);
|
|
} else {
|
|
const isAObject = a && (typeof a === 'object' || typeof a === 'function');
|
|
const isBObject = b && (typeof b === 'object' || typeof b === 'function');
|
|
if (!isListLikeIterableA && isAObject && !isListLikeIterableB && isBObject) {
|
|
return true;
|
|
} else {
|
|
return looseIdentical(a, b);
|
|
}
|
|
}
|
|
}
|