const observed = reactive(original)
expect(isReactive(observed)).toBe(false)
})
+
+ test('hasOwnProperty edge case: Symbol values', () => {
+ const key = Symbol()
+ const obj = reactive({ [key]: 1 }) as { [key]?: 1 }
+ let dummy
+ effect(() => {
+ dummy = obj.hasOwnProperty(key)
+ })
+ expect(dummy).toBe(true)
+
+ delete obj[key]
+ expect(dummy).toBe(false)
+ })
+
+ test('hasOwnProperty edge case: non-string values', () => {
+ const key = {}
+ const obj = reactive({ '[object Object]': 1 }) as { '[object Object]'?: 1 }
+ let dummy
+ effect(() => {
+ // @ts-expect-error
+ dummy = obj.hasOwnProperty(key)
+ })
+ expect(dummy).toBe(true)
+
+ // @ts-expect-error
+ delete obj[key]
+ expect(dummy).toBe(false)
+ })
})
function hasOwnProperty(this: object, key: unknown) {
// #10455 hasOwnProperty may be called with non-string values
- key = '' + key
+ if (!isSymbol(key)) key = String(key)
const obj = toRaw(this)
track(obj, TrackOpTypes.HAS, key)
return obj.hasOwnProperty(key as string)