Javascript 为什么可以';我不能使用.split()?

Javascript 为什么可以';我不能使用.split()?,javascript,arrays,string,arguments,Javascript,Arrays,String,Arguments,我肯定我不知道传递的是什么类型的变量。我的印象是,当我调用函数permutation('abc')时,我正在向函数传递一个字符串。但是当我尝试使用这个方法时,split会给我一个错误,split不是一个函数。所以我用Array.prototype.slice.call(str)解决了这个问题,但问题仍然是为什么.split不是一个选项。我的代码如下: function permutation(str, n) { array = Array.prototype.slice.call(str);

我肯定我不知道传递的是什么类型的变量。我的印象是,当我调用函数permutation('abc')时,我正在向函数传递一个字符串。但是当我尝试使用这个方法时,split会给我一个错误,split不是一个函数。所以我用Array.prototype.slice.call(str)解决了这个问题,但问题仍然是为什么.split不是一个选项。我的代码如下:

function permutation(str, n) {
  array = Array.prototype.slice.call(str); // why not array = str.split('');
  n = n || array.length;

  if (n == 1) {
    console.log(array.join(''));
    return array.join('');
  } else {
    for (var i=0; i<n;i++) {
      permutation(array, n-1);
      if (n%2 == 0) {
        swap(array,i,n-1);
      } 
      else {
        swap(array,0,n-1);
      }
    }
  }
}

function swap(array, i, j) {
  temp = array[i];
  array[i] = array[j];
  array[j] = temp;
  return array;
}

permutation('abc');
函数置换(str,n){ array=array.prototype.slice.call(str);//为什么不array=str.split(“”); n=n | | array.length; 如果(n==1){ console.log(array.join(“”)); 返回数组。join(“”); }否则{
对于(var i=0;i因为这行在:
置换(数组,n-1)中)
,您的递归调用传递的是现在的数组。对排列的第一次调用是字符串,所有递归调用都将传递数组,因为它。在第二次迭代时出错。第一次迭代,
str
是字符串,但在随后的调用中,您传递了带有
排列的数组(数组,n-1)
您将希望传递
array.join(“”)
取而代之,它应该可以工作。不过,我不完全清楚为什么要首先转换为数组?索引访问和字符交换都可以作为字符串来完成。@mhodges如果你用slice插入一个数字数组,它会给你正确的排列。如果使用split,它会出错。@Matt我的观点是OP应该不必拆分为数组。您可以将值保留为字符串并检查长度,执行字符索引/交换。字符串和数组之间的来回转换是不必要的复杂性,这是OP问题的根本原因。因为这行代码:
排列(数组,n-1)
,您的递归调用传递的是现在的数组。对排列的第一次调用是字符串,所有递归调用都将传递数组,因为它。在第二次迭代时出错。第一次迭代,
str
是字符串,但在随后的调用中,您传递了带有
排列的数组(数组,n-1)
您将希望传递
array.join(“”)
取而代之,它应该可以工作。不过,我不完全清楚为什么要首先转换为数组?索引访问和字符交换都可以作为字符串来完成。@mhodges如果你用slice插入一个数字数组,它会给你正确的排列。如果使用split,它会出错。@Matt我的观点是OP应该不必拆分为数组。您可以将值保留为字符串并检查长度,执行字符索引/交换。在字符串和数组之间来回转换是不必要的复杂性,这是OP问题的根本原因。