From: Toni Dietze Date: Mon, 4 Oct 2021 18:02:45 +0000 (+0200) Subject: cache also undefined values in option resolver (#9661) X-Git-Tag: v3.6.0~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=93fcec595cda74991c1578f4138a21955e30ee2c;p=thirdparty%2FChart.js.git cache also undefined values in option resolver (#9661) Otherwise, repeated lookups of undefined properties always trigger the comparatively expensive resolution. This can be the case for example in _calculateBarIndexPixels() in controller.bar.js when looking up options.skipNull and options.maxBarThickness, which is done for each bar in a bar chart. --- diff --git a/src/helpers/helpers.config.js b/src/helpers/helpers.config.js index ce78ec68f..f59ed31f6 100644 --- a/src/helpers/helpers.config.js +++ b/src/helpers/helpers.config.js @@ -181,17 +181,13 @@ const readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name; const needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters'; function _cached(target, prop, resolve) { - let value = target[prop]; // cached value - if (defined(value)) { - return value; + if (Object.prototype.hasOwnProperty.call(target, prop)) { + return target[prop]; } - value = resolve(); - - if (defined(value)) { - // cache the resolved value - target[prop] = value; - } + const value = resolve(); + // cache the resolved value + target[prop] = value; return value; }