1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 20:57:35 +00:00

LibJS: Handle empty strings and arrays in Value::to_number()

- An empty string is converted to 0
 - An empty array is converted to 0
 - An array with one item is converted to that item's numeric value
 - An array with more than one item is converted to NaN
This commit is contained in:
Linus Groh 2020-03-29 15:20:09 +01:00 committed by Andreas Kling
parent 2d3634d5f5
commit bad0556a59
2 changed files with 12 additions and 14 deletions

View file

@ -28,6 +28,7 @@
#include <AK/String.h>
#include <LibJS/Heap/Heap.h>
#include <LibJS/Interpreter.h>
#include <LibJS/Runtime/Array.h>
#include <LibJS/Runtime/Error.h>
#include <LibJS/Runtime/Object.h>
#include <LibJS/Runtime/PrimitiveString.h>
@ -128,7 +129,16 @@ Value Value::to_number() const
case Type::Undefined:
return js_nan();
case Type::Object:
return m_value.as_object->to_primitive(Object::PreferredType::Number).to_number();
if (m_value.as_object->is_array()) {
auto& array = *static_cast<Array*>(m_value.as_object);
if (array.length() == 0)
return Value(0);
if (array.length() > 1)
return js_nan();
return array.elements()[0].to_number();
} else {
return m_value.as_object->to_primitive(Object::PreferredType::Number).to_number();
}
}
ASSERT_NOT_REACHED();