SOURCE

// 1.方法1  利用charAt(),charAt()函数能根据接收到的索引,返回该索引位置对应的字符
function reverseString1(str) {
    var result = '';
    for(var i = str.length-1; i >= 0; i--) {
        result += str.charAt(i);
    }
    return result;
}
console.log(reverseString1('abcdefgh'))

// 2.方法2 利用数组原生的reverse()函数
function reverseString2(str) {
    const result = str.split('').reverse().join('');
    return result;
}
console.log(reverseString2('abcdefg'));

// 3.方法3 通过递归
function reverseString3(strIn, position, strOut) {
    if(position < 0) {
        return strOut;   //除非小于0,不然一直递归调用该函数处理;
    }
    strOut += strIn.charAt(position);
    position--;
    return reverseString3(strIn, position, strOut);
}
var str = 'abcdefg'
var result = '';
console.log(reverseString3(str, str.length-1, result));

//方法4. 通过call函数来改变splice()函数的执行主体
function reverseString4(str) {
    var arr = Array.prototype.slice.call(str);
    console.log(arr);
    return arr.reverse().join('');
}
console.log(reverseString4('abcdefg'))

//方法5 利用栈的先进后出
// 栈
function Stack() {
    this.data = []; //保存栈内的元素
    this.top = 0; //记录栈顶的位置
}
//原型链增加出栈和入栈的方法
Stack.prototype = {
    //入栈:先在栈顶添加元素,然后元素的个数加1
    push: function push(element) {
        this.data[this.top++] = element;
    },
    //出栈:返回栈顶元素,然后元素的个数减1;
    pop: function pop() {
        return this.data[--this.top]
    },
    //返回栈内的元素个数,即长度
    length: function() {
        return this.top;
    }
};
function reverseString5(str) {
    //创建一个栈实例
    var s = new Stack();
    //将字符串转换成数组
    var arr = str.split('');
    var len = arr.length;
    var result = "";
    // 将元素压入栈内
    for(var i = 0; i < len; i++) {
        s.push(arr[i]);
    }
    //输出栈内的元素
    for(var j = 0; j < len; j++) {
        result += s.pop(j);
    }
    return result;
}
console.log(reverseString5('abcdefgh'));

console 命令行工具 X clear

                    
>
console