mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 06:17: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:
parent
2d3634d5f5
commit
bad0556a59
2 changed files with 12 additions and 14 deletions
|
@ -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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue