Apply方法不返回JavaScript中的完整数组值

时间:2018-12-06 08:05:06

标签: javascript

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

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));

在这里,我期望“狗是在苏格兰发现的好动物”,但我得到:“狗是在d发现的好动物”。     d是印度的第三个指数。请让我知道我做错了。谢谢。

1 个答案:

答案 0 :(得分: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));
//                         ^^^^

替代解决方案:

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

有关详细信息,请查看MDN文档:

相关: