From 32a7ab851508d4b61593fbf9c470531bb53eb1ab Mon Sep 17 00:00:00 2001 From: netcon Date: Wed, 7 Apr 2021 17:56:49 +0800 Subject: [PATCH] fix(shared): missed Symbol judge in looseEqual --- packages/shared/__tests__/looseEqual.spec.ts | 12 ++++++++++++ packages/shared/src/looseEqual.ts | 7 ++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/shared/__tests__/looseEqual.spec.ts b/packages/shared/__tests__/looseEqual.spec.ts index fe321cd1539..8a959478e99 100644 --- a/packages/shared/__tests__/looseEqual.spec.ts +++ b/packages/shared/__tests__/looseEqual.spec.ts @@ -49,6 +49,18 @@ describe('utils/looseEqual', () => { expect(looseEqual(date1, date4)).toBe(false) }) + test('compares symbols correctly', () => { + const symbol1 = Symbol('a') + const symbol2 = Symbol('a') + const symbol3 = Symbol('b') + const notSymbol = 0 + + expect(looseEqual(symbol1, symbol1)).toBe(true) + expect(looseEqual(symbol1, symbol2)).toBe(false) + expect(looseEqual(symbol1, symbol3)).toBe(false) + expect(looseEqual(symbol1, notSymbol)).toBe(false) + }) + test('compares files correctly', () => { const date1 = new Date(2019, 1, 2, 3, 4, 5, 6) const date2 = new Date(2019, 1, 2, 3, 4, 5, 7) diff --git a/packages/shared/src/looseEqual.ts b/packages/shared/src/looseEqual.ts index 030f0338b30..387150535c7 100644 --- a/packages/shared/src/looseEqual.ts +++ b/packages/shared/src/looseEqual.ts @@ -1,4 +1,4 @@ -import { isArray, isDate, isObject } from './' +import { isArray, isDate, isObject, isSymbol } from './' function looseCompareArrays(a: any[], b: any[]) { if (a.length !== b.length) return false @@ -16,6 +16,11 @@ export function looseEqual(a: any, b: any): boolean { if (aValidType || bValidType) { return aValidType && bValidType ? a.getTime() === b.getTime() : false } + aValidType = isSymbol(a) + bValidType = isSymbol(b) + if (aValidType || bValidType) { + return a === b + } aValidType = isArray(a) bValidType = isArray(b) if (aValidType || bValidType) {