本文源码 这里
概念
栈的特点就是后进先出。栈有栈顶和栈底的概念。用数组举例子,数组第一个位置这边就是栈底,最后一个元素的位置就是栈顶,新添加的元素保存在栈顶,在 js中基本数据类就是存储在栈中。 数组模拟就是给数组尾部添加元素,移除元素也是从数组尾部移除。
创建一个栈
function Stack() {
  /*通过数组来保存栈的元素*/
  let item = [];
}
给栈添加一些方法
- push 添加一个或几个元素到栈顶
 - pop移除并返回栈顶的元素
 - isEmpty 判断栈是不是空的
 - clear 清空栈内的元素
 - size返回栈内元素个数
 - peek返回栈顶的元素
 
实现
function Stack() {
  // 通过数组保存栈的元素
  let item = [];
  this.push = function (val) {
    return item.push(val);
  };
  this.pop = function (val) {
    return item.pop(val);
  };
  this.isEmpty = function (val) {
    return item.length == 0;
  };
  this.clear = function () {
    item = [];
  };
  this.size = function () {
    return item.length;
  };
  this.peek = function () {
    return item[item.length - 1];
  };
  this.print = function () {
    for (let i = item.length - 1; i >= 0; i--) {
      console.log(item[i]);
    }
  };
}
ES6版本
class Stack {
  item = [];
  constructor() {}
  push(val) {
    return this.item.push(val);
  }
  print() {
    for (let i = this.item.length - 1; i >= 0; i--) {
      console.log(this.item[i]);
    }
  }
  pop(val) {
    return this.item.pop(val);
  }
  isEmpty(val) {
    return this.item.length == 0;
  }
  clear() {
    this.item = [];
  }
  size() {
    return this.item.length;
  }
  peek() {
    return this.item[this.item.length - 1];
  }
}
demo 做一个10进制和其他进制的转换
/*有两个参数 第一个参数要转换的数字 第二个参数是要转换成的进制*/
function conversion(num, type) {
  while (num / type) {
    stack.push(num % type);
    // 确保每次计算后都是整数
    num = parseInt(num / type);
  }
  stack.print();
  // 处理完成后对栈进行清除
  stack.clear();
}