Przeglądaj źródła

LibJS: Return undefined in Array.prototype.{pop,shift} for empty values

Linus Groh 5 lat temu
rodzic
commit
d4ec38097f

+ 2 - 2
Libraries/LibJS/Runtime/ArrayPrototype.cpp

@@ -207,7 +207,7 @@ Value ArrayPrototype::pop(Interpreter& interpreter)
         return {};
     if (array->elements().is_empty())
         return js_undefined();
-    return array->elements().take_last();
+    return array->elements().take_last().value_or(js_undefined());
 }
 
 Value ArrayPrototype::shift(Interpreter& interpreter)
@@ -217,7 +217,7 @@ Value ArrayPrototype::shift(Interpreter& interpreter)
         return {};
     if (array->elements().is_empty())
         return js_undefined();
-    return array->elements().take_first();
+    return array->elements().take_first().value_or(js_undefined());
 }
 
 static Value join_array_with_separator(Interpreter& interpreter, const Array& array, StringView separator)

+ 2 - 0
Libraries/LibJS/Tests/Array.prototype.pop.js

@@ -13,6 +13,8 @@ try {
     assert(value === undefined);
     assert(a.length === 0);
 
+    assert([,].pop() === undefined);
+
     console.log("PASS");
 } catch (e) {
     console.log("FAIL: " + e);

+ 2 - 0
Libraries/LibJS/Tests/Array.prototype.shift.js

@@ -13,6 +13,8 @@ try {
     assert(value === undefined);
     assert(a.length === 0);
 
+    assert([,].shift() === undefined);
+
     console.log("PASS");
 } catch (e) {
     console.log("FAIL: " + e);