From c0ce2523f0bfd7325c8dda3eb2c1acd9a4c0599c Mon Sep 17 00:00:00 2001 From: aleclarson Date: Thu, 13 Dec 2018 21:17:06 -0500 Subject: [PATCH] perf(proxy): deletion of an undeclared property --- src/proxy.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/proxy.js b/src/proxy.js index 64076b73..24129376 100644 --- a/src/proxy.js +++ b/src/proxy.js @@ -107,9 +107,12 @@ function set(state, prop, value) { } function deleteProperty(state, prop) { - state.assigned[prop] = false - markChanged(state) - delete state.copy[prop] + // The `undefined` check is a fast path for pre-existing keys. + if (state.base[prop] !== undefined || prop in state.base) { + state.assigned[prop] = false + markChanged(state) + } + if (state.copy) delete state.copy[prop] return true } @@ -117,8 +120,8 @@ function getOwnPropertyDescriptor(state, prop) { const owner = state.modified ? state.copy : has(state.proxies, prop) - ? state.proxies - : state.base + ? state.proxies + : state.base const descriptor = Reflect.getOwnPropertyDescriptor(owner, prop) if (descriptor && !(Array.isArray(owner) && prop === "length")) descriptor.configurable = true