js 字符串转换为其他数据类型(boolean、Array、symbol、number )

转换例子 列表

let list = ["sdf",123,"999",{
    
    },"{}",true,"true", ["a", "a13"],
      "['a','a13']",
      () => {
    
    
        return 123;
      },
      "() => { return 123}",
      function fn(a = 0) {
    
    
        return a;
      },
      "function fn(a = 0) {return a;}",undefined,"undefined",
      null,"null","NaN",NaN,"Symbol()",Symbol()
    ];

判断方法

// 转换方法
 function transformer(value) {
    
    
      let type = gettype(value);
      if (type == "symbol") {
    
    
        return value;
      }
      if (String(Number(value)) !== "NaN") {
    
    
        // 如果是数字 返回数字
        return value;
      }
      // 如果是数字+其他字符
      if (type == "string" && ismonth(value)) {
    
    
        try {
    
    
          if (gettype(eval(value)) == "Array") return eval(value);
        } catch (error) {
    
    
          return value;
        }
      }
      // 非数字+其他字符组成 排除为 表达式或要执行的语句 执行eval函数
      try {
    
    
        if (eval(value) == undefined) return value;
        value = eval(value);
        return value;
      } catch (error) {
    
    
        return value;
      }
    }
// 判断是否为 数字+其他字符 组成
function ismonth(str) {
    
    
  let reg = /[0-9]/;
  let n = reg.test(str);
  for (var ilen = 0; ilen < str.length; ilen++) {
    
    
    if (str.charAt(ilen) < "0" || str.charAt(ilen) > "9") {
    
    
      return true && n;
    }
  }
  return false;
}
//判断数据类型方法
function gettype(obj) {
    
    
  var type = typeof obj;
  // 如果要判断NaN
  if (String(obj) === "NaN" && type !== "string") {
    
    
    return "NaN";
  }
  if (type !== "object") {
    
    
    return type;
  }
  //如果不是object类型的数据,直接用typeof就能判断出来

  //如果是object类型数据,准确判断类型必须使用Object.prototype.toString.call(obj)的方式才能判断
  return Object.prototype.toString
    .call(obj)
    .replace(/^\[object (\S+)\]$/, "$1");
}

运行 转换


//遍历列表
list.forEach((item, index) => {
    
    
  let nowItem = transformer(item);
  console.log(
    "index:",
    index,
    ";",
    "beforeItem:",
    item,
    ";",
    "beforeItem类型:",
    gettype(item),
    ";",
    "nowItem:",
    nowItem,
    ";",
    "nowItem类型:",
    gettype(nowItem),
    ";"
  );
});

结果

//  index: 0 ; beforeItem: sdf ; beforeItem类型: string ; nowItem: sdf ; nowItem类型: string ;
//  index: 1 ; beforeItem: 123 ; beforeItem类型: number ; nowItem: 123 ; nowItem类型: number ;
//  index: 2 ; beforeItem: 999 ; beforeItem类型: string ; nowItem: 999 ; nowItem类型: string ;
//  index: 3 ; beforeItem: {} ; beforeItem类型: Object ; nowItem: {} ; nowItem类型: Object ;
//  index: 4 ; beforeItem: {} ; beforeItem类型: string ; nowItem: {} ; nowItem类型: string ;
//  index: 5 ; beforeItem: true ; beforeItem类型: boolean ; nowItem: true ; nowItem类型: boolean ;
//  index: 6 ; beforeItem: true ; beforeItem类型: string ; nowItem: true ; nowItem类型: boolean ;
//  index: 7 ; beforeItem: (2) ["a", "a13"] ; beforeItem类型: Array ; nowItem: (2) ["a", "a13"] ; nowItem类型: Array ;
//  index: 8 ; beforeItem: ['a','a13'] ; beforeItem类型: string ; nowItem: (2) ["a", "a13"] ; nowItem类型: Array ;
//  index: 9 ; beforeItem: ƒ () {
    
    
//       return 123;
//     } ; beforeItem类型: function ; nowItem: ƒ () {
    
    
//       return 123;
//     } ; nowItem类型: function ;
//  index: 10 ; beforeItem: () => { return 123} ; beforeItem类型: string ; nowItem: () => { return 123} ; nowItem类型: string ;
//  index: 11 ; beforeItem: ƒ fn() {
    
    
//       var a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
//       return a;
//     } ; beforeItem类型: function ; nowItem: ƒ fn() {
    
    
//       var a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
//       return a;
//     } ; nowItem类型: function ;
//  index: 12 ; beforeItem: function fn(a = 0) {return a;} ; beforeItem类型: string ; nowItem: function fn(a = 0) {return a;} ; nowItem类型: string ;
//  index: 13 ; beforeItem: undefined ; beforeItem类型: undefined ; nowItem: undefined ; nowItem类型: undefined ;
//  index: 14 ; beforeItem: undefined ; beforeItem类型: string ; nowItem: undefined ; nowItem类型: string ;
//  index: 15 ; beforeItem: null ; beforeItem类型: Null ; nowItem: null ; nowItem类型: Null ;
//  index: 16 ; beforeItem: null ; beforeItem类型: string ; nowItem: null ; nowItem类型: string ;
//  index: 17 ; beforeItem: NaN ; beforeItem类型: string ; nowItem: NaN ; nowItem类型: NaN ;
//  index: 18 ; beforeItem: NaN ; beforeItem类型: NaN ; nowItem: NaN ; nowItem类型: NaN ;
//  index: 19 ; beforeItem: Symbol() ; beforeItem类型: string ; nowItem: Symbol() ; nowItem类型: symbol ;
//  index: 20 ; beforeItem: Symbol() ; beforeItem类型: symbol ; nowItem: Symbol() ; nowItem类型: symbol ;

Guess you like

Origin blog.csdn.net/weixin_43245095/article/details/118546670