在javascript参数中被视为字符串的单个字符

时间:2014-12-25 20:07:39

标签: javascript arrays string arguments

我需要编写一个函数来检索传递给函数的最后一个参数。如果它只是参数,它应该返回最后一个元素。如果它是一个字符串,它应该返回最后一个字符。数组应该返回数组的最后一个元素。我的代码适用于数组,字符串和参数,只要它们不是所有字符串。

function last(list){
  var arr;
  if(list instanceof Array){
    return list[list.length-1];
  }
  if(typeof list === 'string' || list instanceof String){
    arr = list.split("");
    return arr[arr.length-1];
  }

  return arguments[arguments.length-1];
}

这适用于几乎所有情况,但是当输入是一串字符串参数时我遇到了问题。

Test.assertEquals(last('a','b','c','z'), 'z');

返回'a'

为什么在测试参数是数组还是字符串时,不相交的字符串是否为true,以及如何通用访问任意参数的最后一个值?

3 个答案:

答案 0 :(得分:1)

这样的事情应该这样做

function last(){
    var a = arguments;
    return (a.length > 1 ? [].slice.call(a) :
            typeof a[0] === 'string' ? a[0].split('') : a[0]).pop();
}

FIDDLE

答案 1 :(得分:0)

将您的函数调用更改为Test.assertEquals(last(['a','b','c','z']), 'z');

在您向last()传递四个不同的参数之前,这会传递一个参数,一个包含四个字符的列表。

答案 2 :(得分:0)

更改您的上一个功能:

function last(list){
  var arr;
  if(list instanceof Array){
    return list[list.length-1];
  }
  if((typeof list === 'string' || list instanceof String) && (arguments.length == 1)){
    arr = list.split("");
    return arr[arr.length-1];
  }

  return arguments[arguments.length-1];
};