Javascript 编写一个函数,该函数以整数作为输入,并将位数返回到二进制

Javascript 编写一个函数,该函数以整数作为输入,并将位数返回到二进制,javascript,arrays,regex,function,Javascript,Arrays,Regex,Function,我正在进行代码战争练习,它不接受我的解决方案,并抛出一个类型错误:无法读取null的属性“length”。我在一个单独的Chrome窗口上检查了我的代码,它工作得非常好。当用任何整数调用函数时,我从二进制数中得到所有的1。我做错了什么 var countBits = function(n) { var result = n.toString(2).match(/1/g).length; return result; }; 若在函数中输入了不匹配的字符,则应添加条件以检查null var

我正在进行代码战争练习,它不接受我的解决方案,并抛出一个类型错误:无法读取null的属性“length”。我在一个单独的Chrome窗口上检查了我的代码,它工作得非常好。当用任何整数调用函数时,我从二进制数中得到所有的1。我做错了什么

var countBits = function(n) {
  var result = n.toString(2).match(/1/g).length;
  return result;
};

若在函数中输入了不匹配的字符,则应添加条件以检查null

var result = n.toString(2).match(/1/g) != null ? n.toString(2).match(/1/g).length : 0;
var countBits=函数(n){
var result=n.toString(2).匹配(/1/g)!=null?n.toString(2).匹配(/1/g).长度:0;
返回结果;
};

log(countBits('a'))
如果字符串与正则表达式不匹配,则返回错误。像这样做

var countBits = function(n) {
  var result = n.toString(2).match(/1/g);
  if (result){       
      return result.length;
  }
  return 0;
};
如果没有1(
0
),则
match
将返回
null
。您可以使用
过滤器

const countBits = n => [...n.toString(2)].filter(e => e === "1").length;

虽然将数字转换为字符串并使用正则表达式进行计数没有什么错,但您也可以使用简单的数学进行计算-只需连续除以2,然后查看数字mod 2,直到将其减为零

var countBits=函数(n){
设s=0;
而(n>0){
s+=n%2
n=数学楼层(n/2)
}
返回s
};
控制台日志(计数位(0))
控制台日志(计数位(2))
控制台日志(计数位(3))

console.log(countBits(1234))
尝试使用zero.Fixed@Ry-,更好吗?