所以我过去经常写这样的东西:
Array.prototype.slice.call(arguments);
- 通过Array.prototype.XXX.call
或Object.prototype.XXX.call([])
等各种方法的类似应用。
所以我去尝试了我不知道存在的Array.isArray
方法,并自动编写了Array.prototype.isArray.call
,当然isArray
因为Array.isArray.call([])
而失败了在原型上定义。
但后来我稍微不假思索地尝试了false
而得到了Array.isArray(thing_to_be_test)
,让我很困惑。
当我去了普通的第三次尝试时,它的工作正常。无聊的方式(正确的用法)并简单地写了false
,但为什么我在之前的尝试中得到{{1}}?我不明白为什么这样做不起作用。
答案 0 :(得分:4)
因为Array.isArray
有一个参数,你没有传递。您只是传递this
值,该值未在函数中使用:
Array.isArray.call(null, [])
答案 1 :(得分:1)
.call()
期望的第一件事是 context 。因此,您基本上使用数组的上下文调用.isArray()
,但undefined
值。
改为打电话:
Array.isArray.call( null, [] );
或使其更逼真:
var isarr = Function.prototype.call.bind( Array.isArray, null );
现在您可以将其称为
isarr( [] );
击> <击> 撞击>