diff --git a/src/shared/util.js b/src/shared/util.js index e4884734326..3621a3ab0b6 100644 --- a/src/shared/util.js +++ b/src/shared/util.js @@ -77,7 +77,7 @@ export function isValidArrayIndex (val: any): boolean { export function toString (val: any): string { return val == null ? '' - : typeof val === 'object' + : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString) ? JSON.stringify(val, null, 2) : String(val) } diff --git a/test/unit/features/directives/html.spec.js b/test/unit/features/directives/html.spec.js index c398828ac1d..5e67c815b2e 100644 --- a/test/unit/features/directives/html.spec.js +++ b/test/unit/features/directives/html.spec.js @@ -44,6 +44,12 @@ describe('Directive v-html', () => { vm.a = {} }).then(() => { expect(vm.$el.innerHTML).toBe('{}') + vm.a = { toString () { return 'foo' } } + }).then(() => { + expect(vm.$el.innerHTML).toBe('foo') + vm.a = { toJSON () { return { foo: 'bar' } } } + }).then(() => { + expect(vm.$el.innerHTML).toBe('{\n "foo": "bar"\n}') vm.a = 123 }).then(() => { expect(vm.$el.innerHTML).toBe('123') diff --git a/test/unit/features/directives/text.spec.js b/test/unit/features/directives/text.spec.js index 477badf9b9b..84f9bbe5db7 100644 --- a/test/unit/features/directives/text.spec.js +++ b/test/unit/features/directives/text.spec.js @@ -30,6 +30,12 @@ describe('Directive v-text', () => { vm.a = {} }).then(() => { expect(vm.$el.innerHTML).toBe('{}') + vm.a = { toString () { return 'foo' } } + }).then(() => { + expect(vm.$el.innerHTML).toBe('foo') + vm.a = { toJSON () { return { foo: 'bar' } } } + }).then(() => { + expect(vm.$el.innerHTML).toBe('{\n "foo": "bar"\n}') vm.a = 123 }).then(() => { expect(vm.$el.innerHTML).toBe('123')