From 42a334e12ee1462ccefc73fd7f24dc6b4ae48403 Mon Sep 17 00:00:00 2001 From: edison Date: Tue, 17 Aug 2021 03:28:34 +0800 Subject: [PATCH] fix(shared): fix toDisplayString on object with null prototype (#4335) fix #4334 --- packages/shared/__tests__/toDisplayString.spec.ts | 5 ++++- packages/shared/src/toDisplayString.ts | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/shared/__tests__/toDisplayString.spec.ts b/packages/shared/__tests__/toDisplayString.spec.ts index 8e76c4322f..385e40e35c 100644 --- a/packages/shared/__tests__/toDisplayString.spec.ts +++ b/packages/shared/__tests__/toDisplayString.spec.ts @@ -19,6 +19,9 @@ describe('toDisplayString', () => { expect(toDisplayString(obj)).toBe(JSON.stringify(obj, null, 2)) const arr = [obj] expect(toDisplayString(arr)).toBe(JSON.stringify(arr, null, 2)) + const foo = Object.create(null) + foo.bar = 1 + expect(toDisplayString(foo)).toBe(JSON.stringify(foo, null, 2)) }) test('refs', () => { @@ -31,7 +34,7 @@ describe('toDisplayString', () => { }) ).toBe(JSON.stringify({ n: 1, np: 2 }, null, 2)) }) - + test('objects with custom toString', () => { class TestClass { toString() { diff --git a/packages/shared/src/toDisplayString.ts b/packages/shared/src/toDisplayString.ts index a374f525d6..62a042bea4 100644 --- a/packages/shared/src/toDisplayString.ts +++ b/packages/shared/src/toDisplayString.ts @@ -2,6 +2,7 @@ import { isArray, isMap, isObject, + isFunction, isPlainObject, isSet, objectToString @@ -14,7 +15,9 @@ import { export const toDisplayString = (val: unknown): string => { return val == null ? '' - : isArray(val) || (isObject(val) && val.toString === objectToString) + : isArray(val) || + (isObject(val) && + (val.toString === objectToString || !isFunction(val.toString))) ? JSON.stringify(val, replacer, 2) : String(val) } -- 2.47.2