mirror of
https://gitee.com/vuejs/vue.git
synced 2024-12-02 20:17:52 +08:00
fix: correct the has
implementation in the _renderProxy
(#7878)
It's feasible that someone might ask if something other than a string is in the proxy such as a `Symbol` that lacks a `charAt` method. This aligns the implementation with the `getHandler`.
This commit is contained in:
parent
17d7a5f6bd
commit
7b387390aa
@ -45,7 +45,7 @@ if (process.env.NODE_ENV !== 'production') {
|
||||
const hasHandler = {
|
||||
has (target, key) {
|
||||
const has = key in target
|
||||
const isAllowed = allowedGlobals(key) || key.charAt(0) === '_'
|
||||
const isAllowed = allowedGlobals(key) || (typeof key === 'string' && key.charAt(0) === '_')
|
||||
if (!has && !isAllowed) {
|
||||
warnNonPresent(target, key)
|
||||
}
|
||||
|
@ -28,5 +28,22 @@ if (typeof Proxy !== 'undefined') {
|
||||
}).$mount()
|
||||
expect(`Property or method "a" is not defined`).not.toHaveBeenWarned()
|
||||
})
|
||||
|
||||
it('support symbols using the `in` operator in hand-written render functions', () => {
|
||||
const sym = Symbol()
|
||||
|
||||
const vm = new Vue({
|
||||
created () {
|
||||
this[sym] = 'foo'
|
||||
},
|
||||
render (h) {
|
||||
if (sym in this) {
|
||||
return h('div', [this[sym]])
|
||||
}
|
||||
}
|
||||
}).$mount()
|
||||
|
||||
expect(vm.$el.textContent).toBe('foo')
|
||||
})
|
||||
})
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user