diff --git a/packages/select/src/option.vue b/packages/select/src/option.vue index b6bc9378cc..ca9573f4ea 100644 --- a/packages/select/src/option.vue +++ b/packages/select/src/option.vue @@ -109,10 +109,10 @@ contains(arr = [], target) { if (!this.isObject) { - return arr.indexOf(target) > -1; + return arr && arr.indexOf(target) > -1; } else { const valueKey = this.select.valueKey; - return arr.some(item => { + return arr && arr.some(item => { return getValueByPath(item, valueKey) === getValueByPath(target, valueKey); }); } diff --git a/packages/select/src/select.vue b/packages/select/src/select.vue index b05dc267e4..ccf424cb04 100644 --- a/packages/select/src/select.vue +++ b/packages/select/src/select.vue @@ -346,7 +346,7 @@ value(val, oldVal) { if (this.multiple) { this.resetInputHeight(); - if (val.length > 0 || (this.$refs.input && this.query !== '')) { + if ((val && val.length > 0) || (this.$refs.input && this.query !== '')) { this.currentPlaceholder = ''; } else { this.currentPlaceholder = this.cachedPlaceHolder; @@ -671,7 +671,7 @@ handleOptionSelect(option, byClick) { if (this.multiple) { - const value = this.value.slice(); + const value = (this.value || []).slice(); const optionIndex = this.getValueIndex(value, option.value); if (optionIndex > -1) { value.splice(optionIndex, 1); diff --git a/test/unit/specs/select.spec.js b/test/unit/specs/select.spec.js index 55a1fafed9..38785596fb 100644 --- a/test/unit/specs/select.spec.js +++ b/test/unit/specs/select.spec.js @@ -843,6 +843,43 @@ describe('Select', () => { expect(vm.value).to.be.equal('test'); }); + it('default value is null or undefined', async() => { + vm = createVue({ + template: ` +