LibJS: Handle Infinity in Value::to_number()

This commit is contained in:
Linus Groh 2020-04-12 13:06:34 +01:00 committed by Andreas Kling
parent 477bacddad
commit f226746394
Notes: sideshowbarker 2024-07-19 07:41:11 +09:00
3 changed files with 17 additions and 0 deletions

View file

@ -136,9 +136,14 @@ Value Value::to_number() const
case Type::Null:
return Value(0);
case Type::String: {
// FIXME: Trim whitespace beforehand
auto& string = as_string()->string();
if (string.is_empty())
return Value(0);
if (string == "Infinity" || string == "+Infinity")
return js_infinity();
if (string == "-Infinity")
return Value(-js_infinity().as_double());
bool ok;
//FIXME: Parse in a better way
auto parsed_int = string.to_int(ok);

View file

@ -10,6 +10,12 @@ try {
assert(new Number(null).valueOf() === 0);
assert(Number(true) === 1);
assert(new Number(true).valueOf() === 1);
assert(Number("Infinity") === Infinity);
assert(new Number("Infinity").valueOf() === Infinity);
assert(Number("+Infinity") === Infinity);
assert(new Number("+Infinity").valueOf() === Infinity);
assert(Number("-Infinity") === -Infinity);
assert(new Number("-Infinity").valueOf() === -Infinity);
assert(isNaN(Number(undefined)));
assert(isNaN(new Number(undefined).valueOf()));
assert(isNaN(Number({})));

View file

@ -22,6 +22,12 @@ try {
// FIXME: returns NaN
// assert(+"1.23" === 1.23)
// assert(-"1.23" === -1.23)
assert(+"Infinity" === Infinity);
assert(+"+Infinity" === Infinity);
assert(+"-Infinity" === -Infinity);
assert(-"Infinity" === -Infinity);
assert(-"+Infinity" === -Infinity);
assert(-"-Infinity" === Infinity);
assert(isNaN(+undefined));
assert(isNaN(-undefined));