我很想知道是否有办法用用户定义的对象伪造Array.isArray()
。
从JavaScript Patterns:
一书中Array.isArray([]); // true
// trying to fool the check
// with an array-like object
Array.isArray({
length: 1,
"0": 1,
slice: function () {}
}); // false
该对象明显失败,但还有其他办法吗?这纯粹是好奇心,而不是因为我认为你可以在常规客户端代码中使用.isArray()
(尽管知道你是否可以做到这一点显然很棒!)。
答案 0 :(得分:10)
Array.isArray = function () { return true; }
如果你想变得顽皮
Array.isArray.toString = function () {
return 'function () { [native code] }';
};
答案 1 :(得分:9)
仅当您将internal [[Class]]
property设置为"Array"
时才可以,这是不可能的。来自specification:
isArray
函数接受一个参数arg
,如果参数是类内部属性为“Array”的对象,则返回布尔值true
;否则返回false
。
或者你反过来:创建一个普通数组并将每个数组方法显式设置为undefined
。