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 ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值