本文将以举例为主,分享JS类型转换的各种solution,也随时欢迎补充和纠正(本文为调试方便使用var声明)

  • 字符串转数字(int,float)
  • 数字转字符串
  • 字符串转对象


字符串转数字(int,float)

最常见转换之一,但是很多人不注意就直接parseInt parseFloat,里面是有坑的,话不多说上例子。

var a = '1r';
console.log(parseInt(a))
//输出 1;显然这不是普遍想要的,因为1r本身没有任何数字意义,parseInt是从第一位开始合法数字截取到非法为止。
//其实我们想要的是一个NAN 因为1r这样的字符串不应该允许成为数字,而应该捕获出来。

那么应该用什么呢?
其实很简单,’-0’即可

var a = '12t';
var b = '123'
console.log('a',a-0)
console.log('b',b-0)
//得到a NaN 和 b 123

同样的 float也是一样,因为JS是弱类型语言,计算过程会发生自动转类型,-0的默认是前面是一个可以被计算机减法的数字,于是发生自动转换。
当然也可以先判断isNaN(‘1a’),然后根据是否来进行下一步的parseInt parseFloat;
插个题外话,小数加减是有精度丢失的,尽量不要用+ -进行数字计算比如可以试试0.6+0.7。成熟的项目要自己分装加减法。
比如 之前写的金额计算工具方法。

function currencyAdd () {
  var res = 0
  try {
    for (var i = 0; i < arguments.length; i++) {
      res += arguments[i]-0
    }
  } catch (e) {
    return '无法累加'
  }
  return res.toFixed(2) - 0
}

function currencyMinus () {
  try {
    if (arguments.length > 1) {
      var res = arguments[0]-0
      for (var i = 1; i < arguments.length; i++) {
        res -= arguments[i]-0
      }
      return res.toFixed(2) - 0
    } else if (arguments.length === 1) {
      return arguments[0].toFixed(2) - 0
    } else {
      return 0
    }
  } catch (e) {
    return '无法相减'
  }
}
currencyMinus(9.65,3.6,0.05) //得到6 而直接9.65-3.6-0.05则会得到6.000000000000001,此处还处理了合法的字符串数字计算

数字转字符串

这里其实没什么坑,只是更简便的写法 +’’;

var a = 1.366;
console.log(a+'') 
//浏览器应该会对不同类型的输出标识不同颜色,可以看到打出的是黑色的1.366而不是蓝色的数字

字符串转对象

绝大多少的情况下,还是推荐 JSON.parse JSON.stringify
这里列举一些偶然所得

var jStr = "{name:'aa',age:35,son:{name:'n',age:11}}"
var result;
result = JSON.parse(jStr)//报错
result = eval('('+jStr+')')

jquery int 转 16 进制 js转int_javascript


这里解决的是复杂的JSONString

当然有的地方会告诉你eval不安全 容易有XXS攻击,其实大可不必,大部分情况下,打个断点然后执行就能做到类似eval的各种效果。当然这是我个人拙见,欢迎讨论。

再加个题外话,调试方法千万种,不要一个console.log走到底,打断点才是王道,即使习惯了打印。那么不妨在遇到数组的时候console.table(arr);

需要查询所有可用方法的对象console.dir(obj)

你会发现新大陆。

暂且就这些了,有空再发点分享吧,希望能帮到点进来的每一位,也欢迎指教。