Array.prototype.join.call(arguments, '')
和arguments.join('')
之间的区别是什么?为什么一个使用另一个?我一直在看第一种方法越来越多。
答案 0 :(得分:1)
arguments.join
不存在,因此存在明显的差异。 arguments
不是数组,但它的行为类似于数组(具有数字属性和长度),因此可以使用Array.prototype.join.call
手动对其使用数组方法。
答案 1 :(得分:1)
这个问题基于错误的前提。
你无法使用arguments.join('')
,因为arguments
没有这样的方法。 arguments
对象与数组有相似之处(例如整数属性,length
属性),但它实际上不是数组。但是,这些相似之处足以使用数组原型join
方法。
答案 2 :(得分:1)
不要将参数误认为数组,它是类似数组的,但没有数组对象通常会拥有的所有方法或属性。例如,参数对象中不存在连接,因此您无法调用arguments.join()。但我们知道join存在于Array.prototype中,所以我们可以调用它并将arguments对象作为调用实例和join参数一起传递,如下所示:
Array.prototype.join.call(arguments, '')
这意味着在Array.prototype中调用join方法,但是使用参数作为对象实例,或者将其称为“this”用于join方法调用。所以你看,即使参数对象中没有这个方法,我们也会误以为它是调用call方法的。这种技术很适合在这种情况下使用。注意:在这种情况下,参数实际上可以充当“this”或实例,因为它具有与任何普通Array对象相同的centain属性名称,因此将正确处理连接innocation。希望有帮助!! :)