Skip to content

Use keyword in instead of hasOwnProperty to check if property exists #174

Description

@ksimple

Describe the bug

hasOwnProperty does not behave as the same as keyword in, it doesn't check the inheritance of property and doesn't check if propety whichi is in prototype

Code sample or steps to reproduce

function target() {
    this.key1 = 1;
}

target.prototype.key2 = 2;

let obj = new target();

console.log(JSONPath({ path: '$.key1', json: obj }));
console.log(JSONPath({ path: '$.key2', json: obj }));

Console error or logs

[ 1 ]
[]

Expected behavior

[ 1 ]
[ 2 ]

Expected result

Environment (IMPORTANT)

  • JSONPath-Plus version: [e.g. 4.0.0]
    7.0.0

Desktop**

  • OS: [e.g. Windows]
  • Browser and version [e.g. chrome 65] or Node Version [e.g. 10.2]

Additional context

Activity

  1. brettz9 commented on Aug 23, 2023

    @brettz9
    Collaborator

    I think this should only be supported by opt-in configuration. Inheritance may more often be used to enhance an object without intending those methods to be used as data.

  2. wxk0248 commented on Jul 29, 2025

    @wxk0248

    I encountered an error using index-browser-umd.js in a low version of Chrome (91.0.4472.164): Object.hasOwn is not a function. It was finally resolved by the following method:
    `<script>
    // Object.hasOwn polyfill
    if (!Object.hasOwn) {
    Object.hasOwn = function(obj, prop) {
    return Object.prototype.hasOwnProperty.call(obj, prop);
    };
    }
    </script>

    <script src="path/to/index-browser-umd.js"></script>`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions