js中数字调用方法后被包装成对象,typeof换成instanceof解决问题

 一年多前用nuxt2.0写的项目,一直正常运行。但最近重新下载依赖后不能正常运行了。回退到前面正常的版本,重新安装依赖,仍然不行,看了看package-lock.json也和以前版本相同。
查找不能正常运行的原因,发现是我加载Number原型上的方法被调用时,this变化了,以前是数字,现在变成了一个数字包装的对象。而这里判断数字时用了typeof,经尝试,改为instanceof即可解决问题。

/**
 * 随机取出一个字符或元素
 * @param n 随机取出n个元素
 * @returns {*}
 */
const rdm = function (n) {
  let temp = '';
  // 比如n为5,则temp最终是'012345'
  // if(typeof this === 'number' ){ // 这是以前的写法,若数字调用,则this变成了包装对象
  if(this instanceof Number){ // 重点:这样写没问题
    for(let i = 0; i<=this; i++){
      temp += i;
    }
  }else{
    temp = this;
  }
  // console.log(temp)
  if(n){
    return temp.disruptOrder().slice(0, n)
  }else{
    return temp[Math.random() * temp.length | 0]
  }

};
Array.prototype.disruptOrder = disruptOrder;
String.prototype.disruptOrder = disruptOrder;
Number.prototype.disruptOrder = disruptOrder;
Array.prototype.rdm = rdm;
String.prototype.rdm = rdm;
Number.prototype.rdm = rdm;

 

上一篇:React属性的3种设置方式


下一篇:typeof与instanceof的区别