如何快速颠倒一个字符串的顺序?

js的字符串对象中并没有直接内置这样的方法,但数组对象却内置了对应的方法,
按照上篇文章中介绍的apply机制,我们可以借助数组的reverse方法啊。

var str="12345";
var a=Array.reverse.call(this,str);
console.log(a) //TypeError: Cannot call method 'call' of undefined

为何会出现此错误?查阅JavaScript核心API后发现,Array.reverse()方法并不支持参数。
所以我们是无法借助call给Array.reverse()方法传入参数str的。
由此可以得出:call、apply并不是万精油。
那么这个时候我们应该换个思路:先把字符串转化成数组,颠倒顺序后再转回来。

var str="12345";
var arr=str.split("");
var a=arr.reverse().join("");
console.log(a);//54321
typeof a;//"string"

我们可以为字符串对象扩展这个方法,方便以后随时调用

String.prototype.reverse=function(){
return this.split("").reverse().join("");
}

OK,此方法完美无缺。
当然,大部分人想到的做法是循环。

var str="12345";
var str1="";
var str2="";
for(var i=str.length-1;i>=0;i--){
var str1=str1+str.charAt(i);
var str2=str2.concat(str.charAt(i));
}
console.log(str1); //"+"用于连接字符串,在IE6以上浏览器效率颇高
console.log(str2); //concat()也用于连接字符串,适用ie6以及更低版本浏览器

我们再来看看,如果让你来设计一门语言,并让你来实现数组的reverse()方法,你该如何做呢?

var arr=[1,2,3,4,5];
Array.prototype.reverse=function(){
for(var i=this.length-1,temp=[];i>=0;i--){
temp.push(this[i]);
}
return temp;
}
arr.reverse(); //[5,4,3,2,1]

由此可以看出,字符串和数组本质上都是同一个数据类型:序列。