From: edison Date: Mon, 16 Aug 2021 19:28:34 +0000 (+0800) Subject: fix(shared): fix toDisplayString on object with null prototype (#4335) X-Git-Tag: v3.2.3~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=42a334e12ee1462ccefc73fd7f24dc6b4ae48403;p=thirdparty%2Fvuejs%2Fcore.git fix(shared): fix toDisplayString on object with null prototype (#4335) fix #4334 --- 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) }