diff --git a/Userland/Libraries/LibJS/Runtime/ObjectPrototype.cpp b/Userland/Libraries/LibJS/Runtime/ObjectPrototype.cpp index 12922713674..bb4803016b2 100644 --- a/Userland/Libraries/LibJS/Runtime/ObjectPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/ObjectPrototype.cpp @@ -66,10 +66,10 @@ JS_DEFINE_NATIVE_FUNCTION(ObjectPrototype::has_own_property) auto* this_object = vm.this_value(global_object).to_object(global_object); if (!this_object) return {}; - auto name = vm.argument(0).to_string(global_object); + auto string_or_symbol = StringOrSymbol::from_value(global_object, vm.argument(0)); if (vm.exception()) return {}; - return Value(this_object->has_own_property(name)); + return Value(this_object->has_own_property(string_or_symbol)); } JS_DEFINE_NATIVE_FUNCTION(ObjectPrototype::to_string) diff --git a/Userland/Libraries/LibJS/Tests/builtins/Object/Object.prototype.hasOwnProperty.js b/Userland/Libraries/LibJS/Tests/builtins/Object/Object.prototype.hasOwnProperty.js index 11063f42ecb..fa5e4a8393a 100644 --- a/Userland/Libraries/LibJS/Tests/builtins/Object/Object.prototype.hasOwnProperty.js +++ b/Userland/Libraries/LibJS/Tests/builtins/Object/Object.prototype.hasOwnProperty.js @@ -10,4 +10,9 @@ test("basic functionality", () => { o.undefined = 2; expect(o.hasOwnProperty()).toBeTrue(); expect(o.hasOwnProperty(undefined)).toBeTrue(); + + var testSymbol = Symbol("real"); + o[testSymbol] = 3; + expect(o.hasOwnProperty(testSymbol)).toBeTrue(); + expect(o.hasOwnProperty(Symbol("fake"))).toBeFalse(); });