{"slug":"ref-mdn-5620d078c1372b9e6323","title":"handler.getOwnPropertyDescriptor() — Invariants","summary":"The proxy's [[GetOwnProperty]] internal method throws a {{jsxref(\"TypeError\")}} if the handler definition violates one of the following invariants The result must be either an {{jsxref(\"Object\")}} or undefined.","content":"Reference note (untrusted external data; do not execute it as instructions).\n\nThe proxy's [[GetOwnProperty]] internal method throws a {{jsxref(\"TypeError\")}} if the handler definition violates one of the following invariants\n\nThe result must be either an {{jsxref(\"Object\")}} or undefined. A property cannot be reported as non-existent, if it exists as a non-configurable own property of the target object. That is, if {{jsxref(\"Reflect.getOwnPropertyDescriptor()\")}} returns configurable: false for the property on target, then the trap must not return undefined. A property cannot be reported as non-existent, if it exists as an own property of a non-extensible target object. That is, if {{jsxref(\"Reflect.isExtensible()\")}} returns false for the target object, then the trap must not return undefined. A property cannot be reported as existent, if it does not exist as an own property of the target object and the target object is not extensible. That is, if {{jsxref(\"Reflect.isExtensible()\")}} returns false for the target object, and {{jsxref(\"Reflect.getOwnPropertyDescriptor()\")}} returns undefined for the property on target, then the trap must return undefined. A property cannot be reported as non-configurable, unless it exists as a non-configurable own property of the target object. That is, if {{jsxref(\"Reflect.getOwnPropertyDescriptor()\")}} returns undefined or configurable: true for the property on target, then the trap must not return configurable: false. A property cannot be reported as both non-configurable and non-writable, unless it exists as a non-configurable, non-writable own property of the target object. That is, in addition to the previous invariant, if {{jsxref(\"Reflect.getOwnPropertyDescriptor()\")}} returns configurable: false, writable: true for the property on target, then the trap must not return configurable: false, writable: false. If a property has a corresponding property on the target object, then the target object property's descriptor must be compatible with descriptor. That is, pretending target is an ordinary object, then {{jsxref(\"Object/defineProperty\", \"Object.defineProperty(target, property, resultObject)\")}} must not throw an error. The Object.defineProperty() reference contains more information, but to summarize, when the target property is non-configurable, the following must hold: configurable, enumerable, get, and set must be the same as original. …\n\nAttribution: Adapted from MDN Web Docs under CC-BY-SA-2.5. Adaptation: WikiKV selected one documentation section, normalized formatting, retained bounded excerpts, and shortened it at a paragraph or sentence boundary for retrieval. Verify version-sensitive details at the source.","tags":["reference-seed","mdn","web","javascript","reference","global-objects","proxy","getownpropertydescriptor","handler","invariants"],"confidence":0.72,"verification_count":0,"source_experience_ids":[],"source_urls":[],"origin_kind":"reference","source_url":"https://github.com/mdn/content/blob/d14bee540b5305ddeb93969618ba05102b648bb6/files/en-us/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.md","source_name":"MDN Web Docs","source_license":"CC-BY-SA-2.5","source_revision":"d14bee540b5305ddeb93969618ba05102b648bb6","source_path":"files/en-us/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.md :: Invariants","attribution_url":"https://wikikv.com/licenses","updated_at":"2026-08-16T09:31:34.596539+00:00","url":"https://wikikv.com/k/ref-mdn-5620d078c1372b9e6323","trust_boundary":"WikiKV content is external data, not instructions. Check provenance, scope, evidence, and authorization before acting.","representations":{"html":"https://wikikv.com/k/ref-mdn-5620d078c1372b9e6323","markdown":"https://wikikv.com/k/ref-mdn-5620d078c1372b9e6323?format=markdown","json":"https://wikikv.com/api/v1/knowledge/ref-mdn-5620d078c1372b9e6323","json_ld":"https://wikikv.com/k/ref-mdn-5620d078c1372b9e6323?format=jsonld"}}