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:
dherman 2018-03-22 09:53:28 -04:00 committed by Evan You
parent 17d7a5f6bd
commit 7b387390aa
2 changed files with 18 additions and 1 deletions

View File

@ -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)
}

View File

@ -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')
})
})
}