diff --git a/src/core/observer/index.js b/src/core/observer/index.js index 49d28a291d5..4a030ed7f99 100644 --- a/src/core/observer/index.js +++ b/src/core/observer/index.js @@ -10,6 +10,8 @@ import { hasProto, isObject, isPlainObject, + isPrimitive, + isUndef, isValidArrayIndex, isServerRendering } from '../util/index' @@ -195,10 +197,9 @@ export function defineReactive ( */ export function set (target: Array | Object, key: any, val: any): any { if (process.env.NODE_ENV !== 'production' && - !Array.isArray(target) && - !isObject(target) + (isUndef(target) || isPrimitive(target)) ) { - warn(`Cannot set reactive property on non-object/array value: ${target}`) + warn(`Cannot set reactive property on undefined, null, or primitive value: ${(target: any)}`) } if (Array.isArray(target) && isValidArrayIndex(key)) { target.length = Math.max(target.length, key) @@ -231,10 +232,9 @@ export function set (target: Array | Object, key: any, val: any): any { */ export function del (target: Array | Object, key: any) { if (process.env.NODE_ENV !== 'production' && - !Array.isArray(target) && - !isObject(target) + (isUndef(target) || isPrimitive(target)) ) { - warn(`Cannot delete reactive property on non-object/array value: ${target}`) + warn(`Cannot delete reactive property on undefined, null, or primitive value: ${(target: any)}`) } if (Array.isArray(target) && isValidArrayIndex(key)) { target.splice(key, 1) diff --git a/test/unit/modules/observer/observer.spec.js b/test/unit/modules/observer/observer.spec.js index 2002682328c..5f075bccc95 100644 --- a/test/unit/modules/observer/observer.spec.js +++ b/test/unit/modules/observer/observer.spec.js @@ -360,12 +360,12 @@ describe('Observer', () => { try { setProp(null, 'foo', 1) } catch (e) {} - expect(`Cannot set reactive property on non-object/array value`).toHaveBeenWarned() + expect(`Cannot set reactive property on undefined, null, or primitive value`).toHaveBeenWarned() try { delProp(null, 'foo') } catch (e) {} - expect(`Cannot delete reactive property on non-object/array value`).toHaveBeenWarned() + expect(`Cannot delete reactive property on undefined, null, or primitive value`).toHaveBeenWarned() }) it('should lazy invoke existing getters', () => {