在MDN上两个函数的解释分别为:
Math.trunc() 方法会将数字的小数部分去掉,只保留整数部分
parseInt() 函数解析一个字符串参数,并返回一个指定基数的整数 (数学系统的基础)。
写了一点测试代码:
console.log(Number.parseInt(-1.20));
console.log(Math.trunc(-1.20));
console.log(Number.parseInt(100.20));
console.log(Math.trunc(100.20));
console.log(Number.parseInt('中文'));
console.log(Math.trunc('中文'));
运行结果完全一致:
查了一下各自的api,Number.parseInt功能上完全覆盖Math.trunc,ES6中增加这个Math.trunc有什么用?
在数字极大或是极小时候,会自动采用科学计数法时候,
parseInt
是会有问题的。虽然功能上可能对于部分结果一致,但是其作用是不一样的。
parseInt
在实际运用上经常会出一些问题,比如0X
或是0
开头就会出现解析为十六进制或八进制的问题,虽然你可能本意是转换为十进制,但是后端传递值或是用户输入并不会和你想象的一样。Math.trunc
在ES6更多的是为了补足floor
,round
,ceil
这一系列的方法,以及可想而知,在Math.trunc
适用的领域,其性能会比parseInt
好不少。从另外一个角度上来说,如果给你一个能够完成所有功能的函数,但是需要传递很多不同参数,或是命名功能分类清晰的多种函数,去完成一个项目,你会选择哪种呢?
个人而言绝对选择是后一种。