]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(shared): fix toDisplayString on object with null prototype (#4335)
authoredison <daiwei521@126.com>
Mon, 16 Aug 2021 19:28:34 +0000 (03:28 +0800)
committerGitHub <noreply@github.com>
Mon, 16 Aug 2021 19:28:34 +0000 (15:28 -0400)
fix #4334

packages/shared/__tests__/toDisplayString.spec.ts
packages/shared/src/toDisplayString.ts

index 8e76c4322f9c80358b770fe0d46b10ed0fba68d6..385e40e35c975e42010a040c3da5d9e9e3ce5489 100644 (file)
@@ -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() {
index a374f525d6bb8589097b5a01c65cd8a609a38dc5..62a042bea47c12e459ebfac0456293ca61283a44 100644 (file)
@@ -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)
 }