File tree Expand file tree Collapse file tree 2 files changed +29
-1
lines changed Expand file tree Collapse file tree 2 files changed +29
-1
lines changed Original file line number Diff line number Diff line change @@ -302,4 +302,32 @@ describe('reactivity/reactive', () => {
302302 const observed = reactive ( original )
303303 expect ( isReactive ( observed ) ) . toBe ( false )
304304 } )
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+ } )
305333} )
Original file line number Diff line number Diff line change @@ -82,7 +82,7 @@ function createArrayInstrumentations() {
8282
8383function hasOwnProperty ( this : object , key : unknown ) {
8484 // #10455 hasOwnProperty may be called with non-string values
85- key = '' + key
85+ if ( ! isSymbol ( key ) ) key = String ( key )
8686 const obj = toRaw ( this )
8787 track ( obj , TrackOpTypes . HAS , key )
8888 return obj . hasOwnProperty ( key as string )
You can’t perform that action at this time.
0 commit comments