为何Number.toString(2)会执行n%2取余?附相关代码疑问
关于
toString(2)的误解解答 兄弟,你完全误会啦!toString(2)根本没在执行n%2的取余运算,咱们一步步拆解开你的疑惑和代码:
先搞懂toString(2)的真实作用
Number.prototype.toString()方法的参数是基数(radix),当你传入2的时候,它的功能是把数字转换成二进制格式的字符串,和取余半毛钱关系都没有!举几个例子:
2.toString(2)返回字符串"10"(这是数字2的二进制表示,可不是2%2的结果0)3.toString(2)返回"11",5.toString(2)返回"101",这些都是标准的二进制转字符串操作
再看你代码里的+n.toString(2)
你在前面加的那个+号才是关键!它的作用是把二进制格式的字符串转换成十进制数字。比如:
- 当
n=2时,n.toString(2)得到"10",前面加+就变成了十进制的10,这就是你console.log(toBinary(2))输出10的原因
为啥你会误以为它在做取余?
估计是你把手动实现二进制转换的逻辑和内置方法搞混了!手动转二进制确实会用到n%2取余来获取每一位,比如下面这个手动实现的函数:
function manualBinaryConvert(n) { let binaryStr = ''; while (n > 0) { // 取余得到当前最低位 binaryStr = (n % 2) + binaryStr; // 整除2往前推一位 n = Math.floor(n / 2); } return binaryStr; }
但这个是咱们手动写的逻辑,和JS内置的toString(2)完全不是一回事——内置方法是直接调用JS引擎的底层转换逻辑,根本不需要自己做取余运算。
最后再梳理下你的代码流程
当你调用toBinary(2)时:
n.toString(2)将数字2转换为二进制字符串"10"+运算符把这个字符串转换成十进制数字10- 函数返回
10,最终console.log输出10
内容的提问来源于stack exchange,提问作者EdgarChe
相关产品推荐
相关产品推荐

