diff --git a/package.json b/package.json index 63da803a6e1..2c969bee6c4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vue", - "version": "2.5.16", + "version": "2.5.17-beta.0", "description": "Reactive, component-oriented view layer for modern web interfaces.", "main": "dist/vue.runtime.common.js", "module": "dist/vue.runtime.esm.js", diff --git a/src/shared/util.js b/src/shared/util.js index e4884734326..1d36aca14f7 100644 --- a/src/shared/util.js +++ b/src/shared/util.js @@ -282,15 +282,21 @@ export function looseEqual (a: any, b: any): boolean { return a.length === b.length && a.every((e, i) => { return looseEqual(e, b[i]) }) - } else if (!isArrayA && !isArrayB) { - const keysA = Object.keys(a) - const keysB = Object.keys(b) - return keysA.length === keysB.length && keysA.every(key => { - return looseEqual(a[key], b[key]) - }) } else { - /* istanbul ignore next */ - return false + const isDateA = a instanceof Date + const isDateB = b instanceof Date + if (isDateA && isDateB) { + return a.toUTCString() === b.toUTCString() + } else if (!isArrayA && !isArrayB && !isDateA && !isDateB) { + const keysA = Object.keys(a) + const keysB = Object.keys(b) + return keysA.length === keysB.length && keysA.every(key => { + return looseEqual(a[key], b[key]) + }) + } else { + /* istanbul ignore next */ + return false + } } } catch (e) { /* istanbul ignore next */ diff --git a/test/unit/features/directives/model-select.spec.js b/test/unit/features/directives/model-select.spec.js index c961224972b..2bf5cb4d357 100644 --- a/test/unit/features/directives/model-select.spec.js +++ b/test/unit/features/directives/model-select.spec.js @@ -588,4 +588,31 @@ describe('Directive v-model select', () => { }).then(done) }) }) + + // #7928 + it('should correctly handle option with date value', done => { + const vm = new Vue({ + data: { + dates: [ + new Date(1520000000000), + new Date(1522000000000), + new Date(1516000000000) + ], + selectedDate: null + }, + template: + '
' + + '' + + '
' + }).$mount() + + vm.selectedDate = vm.dates[2] + waitForUpdate(() => { + expect(vm.$el.firstChild.selectedIndex).toBe(2) + }).then(done) + }) })