apply方法不在javascript中返回完整的数组值

use*_*590 3 javascript

我在apply方法中传递了一个数组,我期望返回数组的全值,但是当我使用数组的索引值给出该索引的值时,数组方法实际上返回了字符索引:

var obj = {
  name: 'Dogs'
}
var arr = ['India', 'Slovenia', 'Scotland'];

var getanimalsinfo = function(a) {

  return this.name + ' is good animal found in ' + a[2]

}
console.log(getanimalsinfo.apply(obj, arr));
Run Code Online (Sandbox Code Playgroud)

在这里,我期待"狗是在苏格兰发现的好动物",但我得到了:'狗是在d'中找到的好动物.这里d是印度的第三个指数.请让我知道我做错了什么.谢谢.

Fel*_*ing 6

.apply将数组的每个元素作为单独的参数传递给函数.即在你的情况下,该函数被调用为getanimalsinfo(arr[0], arr[1], arr[2]),因此a将具有该值'india'.

如果要将数组作为单个参数传递(相当于getanimalsinfo(arr)),请.call改用:

var obj = {
  name: 'Dogs'
}
var arr = ['india', 'slovenia', 'scotland'];

var getanimalsinfo = function(a) {

  return this.name + ' is good animal found in ' + a[2]

}
console.log(getanimalsinfo.call(obj, arr));
//                         ^^^^
Run Code Online (Sandbox Code Playgroud)

替代方案:

  • 将传递的参数换行到.apply另一个数组中:getanimalsinfo.apply(obj, [arr])
  • 在函数定义中使用rest参数:function(...a) { /*...*/ }

有关更多信息,请查看MDN文档:

有关: