可以通过以下代码来欺骗 Array.isArray:
const originalIsArray = Array.isArray;
Array.isArray = function(target) {
if (target && typeof target === 'object') {
return 'length' in target && 'splice' in target;
}
return originalIsArray(target);
};
console.log(Array.isArray([])); // true
console.log(Array.isArray({})); // false
Array.isArray = originalIsArray;
通过在 Array.isArray 函数内部重写 Array.isArray 方法来创建一个新的 Array.isArray 函数。新函数首先检查传递给它的参数是否是一个对象,并确保它有一个 length 属性和一个 splice 方法。如果有,它将返回 true。否则,它会回退到原始的 Array.isArray 方法。
尽管这种方法可以欺骗 Array.isArray,但只要代码执行了新的 Array.isArray 方法,原始的 Array.isArray 实现还将始终存在。因此,在完成测试后,确保将 Array.isArray 重置为原始实现。