一种快速将将10进制转换为二进制的方法
今天本来无意中发现Number的toString方法不是完全的继承自Object原型上,而是可以给其传参数,这就引起了我比较大的兴趣。我就想知道这个传入的参数到底有啥用?还有Number上的toString方法到底和Object上的toString方法有啥区别。
不同数据类型的toString方法分别返回啥
-
Object对象的toString返回的就是表示对象数据类型的字符串[object Object],进而我们可以根据对象toString方法使用Object.prototype.toString.call([arry | number | string | ...])来达到精确判断数据类型的功能比如:const a = [] const b = '' Object.prototype.toString.call(a) // [object Array] Object.prototype.toString.call(b) // [object String] -
Array上的toString方法分为两种情况- 数组内元素是简单数据类型会将数组内的元素用
,合并成字符串返回例如:
const a = [1,2,3,4] a.toString() // 1,2,3,4- 数组内元素是复杂数据类型这种情况下会调用子元素的
toString方法
const a = [{},{}] a.toString() // [object Object],[object Object] const b = [()=>{},()=>{}] b.toString() // ()=>{},()=>{} const c = [[1,2],[3,4]] c.toString() // 1,2,3,4延申一下,所以我们完全可以通过数组的
toString方法来实现join的简单功能 - 数组内元素是简单数据类型会将数组内的元素用
-
Function上的toString方法,这个就比较简单了就是纯粹的将函数体作为字符串返回var a = () => {} a.toString() // ()=>{} -
String的toString方法,就是纯粹的返回字符串
与众不同的Number类型的toString方法
Number类型的toString方法究竟是啥样的呢?让我们来看看
var a = 1
a.toString() // 1
看起来好像也没有什么神奇的地方啊~也就是纯粹的将number转换为字符串而已,别着急看看下面的例子
var a = 2
a.toString(2) // 10
是不是很神奇这里直接将10进制的数转换为了二进制数的字符串表示,根据规定这里toString的参数为要转换的进制范围为2-36,利用这个特性我们很容易的就可以将一个10进制的数转换为任意2-36进制。
其实这里的转换规则还有其他规定感兴趣的可以看看MDN和ECMA的具体规定