File tree 2 files changed +29
-1
lines changed
2 files changed +29
-1
lines changed Original file line number Diff line number Diff line change @@ -302,4 +302,32 @@ describe('reactivity/reactive', () => {
302
302
const observed = reactive ( original )
303
303
expect ( isReactive ( observed ) ) . toBe ( false )
304
304
} )
305
+
306
+ test ( 'hasOwnProperty edge case: Symbol values' , ( ) => {
307
+ const key = Symbol ( )
308
+ const obj = reactive ( { [ key ] : 1 } ) as { [ key ] ?: 1 }
309
+ let dummy
310
+ effect ( ( ) => {
311
+ dummy = obj . hasOwnProperty ( key )
312
+ } )
313
+ expect ( dummy ) . toBe ( true )
314
+
315
+ delete obj [ key ]
316
+ expect ( dummy ) . toBe ( false )
317
+ } )
318
+
319
+ test ( 'hasOwnProperty edge case: non-string values' , ( ) => {
320
+ const key = { }
321
+ const obj = reactive ( { '[object Object]' : 1 } ) as { '[object Object]' ?: 1 }
322
+ let dummy
323
+ effect ( ( ) => {
324
+ // @ts -expect-error
325
+ dummy = obj . hasOwnProperty ( key )
326
+ } )
327
+ expect ( dummy ) . toBe ( true )
328
+
329
+ // @ts -expect-error
330
+ delete obj [ key ]
331
+ expect ( dummy ) . toBe ( false )
332
+ } )
305
333
} )
Original file line number Diff line number Diff line change @@ -82,7 +82,7 @@ function createArrayInstrumentations() {
82
82
83
83
function hasOwnProperty ( this : object , key : unknown ) {
84
84
// #10455 hasOwnProperty may be called with non-string values
85
- key = '' + key
85
+ if ( ! isSymbol ( key ) ) key = String ( key )
86
86
const obj = toRaw ( this )
87
87
track ( obj , TrackOpTypes . HAS , key )
88
88
return obj . hasOwnProperty ( key as string )
You can’t perform that action at this time.
0 commit comments