ソースを参照

LibJS: Fix Object.prototype.valueOf() behavior

No idea why it was implemented like this, but a value_of() call on the
coerced object is not part of the spec. Also added some tests.
Linus Groh 4 年 前
コミット
33eea1f722

+ 1 - 4
Userland/Libraries/LibJS/Runtime/ObjectPrototype.cpp

@@ -106,10 +106,7 @@ JS_DEFINE_NATIVE_FUNCTION(ObjectPrototype::to_locale_string)
 // 20.1.3.7 Object.prototype.valueOf ( ), https://tc39.es/ecma262/#sec-object.prototype.valueof
 JS_DEFINE_NATIVE_FUNCTION(ObjectPrototype::value_of)
 {
-    auto* this_object = vm.this_value(global_object).to_object(global_object);
-    if (!this_object)
-        return {};
-    return this_object->value_of();
+    return vm.this_value(global_object).to_object(global_object);
 }
 
 // 20.1.3.4 Object.prototype.propertyIsEnumerable ( V ), https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable

+ 8 - 0
Userland/Libraries/LibJS/Tests/builtins/Object/Object.prototype.valueOf.js

@@ -0,0 +1,8 @@
+test("basic functionality", () => {
+    expect(Object.prototype.valueOf).toHaveLength(0);
+
+    const o = {};
+    expect(o.valueOf()).toBe(o);
+
+    expect(Object.prototype.valueOf.call(42)).toEqual(new Number(42));
+});