mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 03:55:24 +00:00
LibJS: Add Array.isArray()
This commit is contained in:
parent
01fd6ce045
commit
ca22476d9d
Notes:
sideshowbarker
2024-07-19 06:52:57 +09:00
Author: https://github.com/linusg Commit: https://github.com/SerenityOS/serenity/commit/ca22476d9d6 Pull-request: https://github.com/SerenityOS/serenity/pull/2159 Reviewed-by: https://github.com/alimpfard
3 changed files with 42 additions and 0 deletions
|
@ -41,6 +41,9 @@ ArrayConstructor::ArrayConstructor()
|
|||
{
|
||||
put("prototype", interpreter().global_object().array_prototype(), 0);
|
||||
put("length", Value(1), Attribute::Configurable);
|
||||
|
||||
u8 attr = Attribute::Writable | Attribute::Configurable;
|
||||
put_native_function("isArray", is_array, 1, attr);
|
||||
}
|
||||
|
||||
ArrayConstructor::~ArrayConstructor()
|
||||
|
@ -74,4 +77,13 @@ Value ArrayConstructor::construct(Interpreter& interpreter)
|
|||
return call(interpreter);
|
||||
}
|
||||
|
||||
Value ArrayConstructor::is_array(Interpreter& interpreter)
|
||||
{
|
||||
auto value = interpreter.argument(0);
|
||||
if (!value.is_array())
|
||||
return Value(false);
|
||||
// Exclude TypedArray and similar
|
||||
return Value(StringView(value.as_object().class_name()) == "Array");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -41,6 +41,8 @@ public:
|
|||
private:
|
||||
virtual bool has_constructor() const override { return true; }
|
||||
virtual const char* class_name() const override { return "ArrayConstructor"; }
|
||||
|
||||
static Value is_array(Interpreter&);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
28
Libraries/LibJS/Tests/Array.isArray.js
Normal file
28
Libraries/LibJS/Tests/Array.isArray.js
Normal file
|
@ -0,0 +1,28 @@
|
|||
load("test-common.js");
|
||||
|
||||
try {
|
||||
assert(Array.isArray.length === 1);
|
||||
|
||||
assert(Array.isArray() === false);
|
||||
assert(Array.isArray("1") === false);
|
||||
assert(Array.isArray("foo") === false);
|
||||
assert(Array.isArray(1) === false);
|
||||
assert(Array.isArray(1, 2, 3) === false);
|
||||
assert(Array.isArray(undefined) === false);
|
||||
assert(Array.isArray(null) === false);
|
||||
assert(Array.isArray(Infinity) === false);
|
||||
assert(Array.isArray({}) === false);
|
||||
|
||||
assert(Array.isArray([]) === true);
|
||||
assert(Array.isArray([1]) === true);
|
||||
assert(Array.isArray([1, 2, 3]) === true);
|
||||
assert(Array.isArray(new Array()) === true);
|
||||
assert(Array.isArray(new Array(10)) === true);
|
||||
assert(Array.isArray(new Array("a", "b", "c")) === true);
|
||||
// FIXME: Array.prototype is supposed to be an array!
|
||||
// assert(Array.isArray(Array.prototype) === true);
|
||||
|
||||
console.log("PASS");
|
||||
} catch (e) {
|
||||
console.log("FAIL: " + e);
|
||||
}
|
Loading…
Add table
Reference in a new issue