Description
Three related edge cases in the core acf JS utilities (assets/src/js/_acf.js), grouped because fixes would land together:
acf.get() cannot return falsy stored values: it returns this.data[name] || null, so stored 0, '', or false come back as null, and acf.has() reports them missing.
acf.isObject( null ) === true: typeof null === 'object'.
acf._e( 'missing', 'sub' ) returns String.prototype.sub: when the first key is unknown, the lookup indexes into an empty string, so any second key naming a String method leaks that function instead of returning ''.
All three are long-standing characterized behavior; fixing them changes the public API surface subtly, so each needs a quick ecosystem-impact look (e.g. code relying on get() || default patterns is unaffected by 1).
Reproduction
Characterized in #450: tests/js/acf-utilities.test.js (NOTE comments at the get()/isObject() cases) and tests/js/compatibility.test.js (_e() case).
Found during the 2026-06 test campaign (see PR #450).
Description
Three related edge cases in the core
acfJS utilities (assets/src/js/_acf.js), grouped because fixes would land together:acf.get()cannot return falsy stored values: it returnsthis.data[name] || null, so stored0,'', orfalsecome back asnull, andacf.has()reports them missing.acf.isObject( null ) === true:typeof null === 'object'.acf._e( 'missing', 'sub' )returnsString.prototype.sub: when the first key is unknown, the lookup indexes into an empty string, so any second key naming a String method leaks that function instead of returning''.All three are long-standing characterized behavior; fixing them changes the public API surface subtly, so each needs a quick ecosystem-impact look (e.g. code relying on
get() || defaultpatterns is unaffected by 1).Reproduction
Characterized in #450:
tests/js/acf-utilities.test.js(NOTE comments at theget()/isObject()cases) andtests/js/compatibility.test.js(_e()case).Found during the 2026-06 test campaign (see PR #450).