
解题
通过num.toString(2)能直接将num转换为2进制数格式的字符串,利用下标就能将对应值取出来。题目返回的数字是从右往左,因此下标为倒数,所以就是s.length-bit
function valueAtBit(num, bit) {
var s = num.toString(2);
return s[s.length - bit]; //注意理解该处
}
Q1:s[s.length - bit]; s不应该是字符串吗,怎么可以用数组的方法来找bit位置的值
A1:js 字符串、数组是类数组,区别是字符串是不可变的,而 数组是可变的。不可变是指字符串的成员函数不会改变原始值,而创建返回一个新的字符串
Q2:用parseInt 函数可以吗
A2:parseInt(num,进制)是将num看成几进制再转化为十进制整数
一、知识点 - toString方法(number > string)
定义
toString() 方法可把一个 Number 对象转换为一个字符串,并返回结果。
语法
NumberObject.toString(radix)
- NumberObject可以是二进制、八进制、十进制、十六进制,以开头格式为准
参数
- radix - (可选) 规定表示数字的基数,使 2 ~ 36 之间的整数。例如,当 radix 为 2 时,会被转换为二进制值表示的字符串。
- 省略则默认10
- 但是要注意,如果该参数是 10 以外的其他值,则 ECMAScript 标准允许实现返回任意值。
返回值
返回radix进制的字符串
实例
var a = 32;
console.log(a.toString(2)); //返回字符串100000
console.log(a.toString(4)); //返回字符串200
console.log(a.toString(16)); //返回字符串20
console.log(a.toString(30)); //返回字符串12
console.log(a.toString(32)); //返回字符串10
var b = 010; //八进制数
console.log(b.toString(2)); //返回字符串1000
var c = 0x10; //十六进制数
console.log(c.toString(2)); //返回字符串10000;
数值直接量不能直接调用 toString() 方法,必须先使用小括号或其他方法转化数字
console.log(123.toString()); //抛出语法错误 相当于打印 123.0toString()
console.log((123).toString()); //返回123
var a = 123;
console.log(a.toString()); //返回123
注意
- undefined和null没有toString()方法
- 布尔型数据true和false返回对应的’true’和’false’
- 数值类型的情况较复杂
- 正浮点数及NaN、Infinity加引号返回
1.23.toString();//'1.23'
NaN.toString();//'NaN'
Infinity.toString();//'Infinity'
- 负浮点数或加’+'号的正浮点数直接跟上.toString(),相当于先运行toString()方法,再添加正负号,转换为数字
+1.23.toString();//1.23
typeof +1.23.toString();//'number'
-1.23.toString();//-1.23
typeof -1.23.toString();//'number'
- 整数直接跟上.toString()形式,会报错,提示无效标记,因为整数后的点会被识别为小数点,因此,为避免,需要加括号
(0).toString();//'0'
(-0).toString();//'0'
(2).toString();//'2'
(-2).toString();//'-2'
二、知识点 - parseInt() 方法 ( string > number)
定义和用法
parseInt() 函数可解析一个字符串,并返回一个十进制整数。
parseInt("10"); // 返回 10
parseInt("10.33"); // 返回 10
parseInt("10 20 30"); // 返回 10
parseInt("10 years"); // 返回 10
parseInt("years 10"); // 返回 NaN
语法
parseInt(string, radix) (和toString用法有区别:NumberObject.toString(radix))
参数
string - (必需) - 要被解析的字符串。
radix - (可选) - 表示要解析的数字的基数。该值介于 2 ~ 36 之间。
-
省略或为 0,则radix默认为 10 。若以 “0x” 或 “0X” 开头,将radix为 16 。
-
若radix小于 2 或者大于 36,则 parseInt() 将返回 NaN。
返回值
返回一个十进制的整数或者NaN
实例
当十进制字符串转十进制数字时,第二个参数radix可以不填
function base10(str) {
var decimalNum = parseInt(str);
return decimalNum;
}
但当二进制字符串转对应的十进制数字时,radix需要填2,将原值视为二进制的数
function base2(str) {
var decimalNum = parseInt(str,2);
console.log(decimalNum);
}
base2('3'); //NaN,因为二进制中没有3
base2('11'); //3
本文详细介绍了JavaScript中将数字转换为二进制字符串的`toString()`方法和将字符串转换为十进制整数的`parseInt()`方法。通过实例展示了它们的用法、参数以及注意事项,强调了在进行二进制转换时指定基数的重要性。


被折叠的 条评论
为什么被折叠?



