我不明白这里发生了什么。代码如何显示11?
var z = 5;
console.log(z.toString.call(16)); //output 16
var z = 5;
console.log(z.toString.call(16,15));// output 11
答案 0 :(得分:1)
第二个参数(如果有)是您希望与之转换的基数(基数)。
您已指定应使用基数15,因此将值16转换为字符串“ 11”(1 * 15 +1)。
答案 1 :(得分:1)
Number#toString
方法使用一个基数参数,并将数字转换为该参数提供的基数:
var decimal = 10;
var binary = decimal.toString(2);
console.log(binary)
使用Function.call
时,提供的 first 参数是方法的this
上下文。本质上,您可以更改起始号码:
var num = 10;
var otherNumber = 42;
console.log(num.toString.call(otherNumber));
// ^^^ ^^^^^^^^^^^
//ignored ___| |
//the new `this` __________________|
当您向.call
提供 second 参数时,该参数成为该方法的 first 参数。
因此,考虑到这一点,当您致电z.toString.call(16,15)
时,z
就无关紧要了,实际上是在致电
console.log((16).toString(15))
在以15为底的基数中,十进制16
实际上已转换为11
。