isNaN() javascript,数字加2个逗号

isNaN() javascript, number with 2 commas

本文关键字:2个 数字 javascript isNaN      更新时间:2023-09-26

我正在使用百分比和setInterval()所以我有一个

    var intervalId;
    function randomize(){
       var prc = $("#prc").val();
       var c = 0 ;
       if (!intervalId){
          intervalId = setInterval(function(){
              c = c + 1;
              var attempt = Math.random() * 100;
              if (attempt <= prc){
                  clearInterval(intervalId);
                  intervalId = false;
                  $("#attemptnbr").val(c);
              }
          }, 100);
       }
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
Percentage : <input type="text" id="prc"/>
<button onclick="randomize()">GO</button>
Number of attempts :<input type="text" id="attemptnbr"/>

但实际上,如果用户将#prc输入设置为50.345.34,则attempt <= prc条件总是返回true。当这个输入被设置为像50.345.34这样的数字时,我尝试了console.log(isNaN(prc)),它总是返回false

为什么它被认为是一个数值?

但实际上,如果用户将#prc输入设置为50.345.34,则try <= prc条件总是返回true。

很确定这是观测误差。prc是一个字符串,然后通过<=运算符将其隐式转换为数字。这个数字将是NaN,因为"50.345.34"不能隐式转换,使用NaN的关系永远不会为真。

然而,它并没有真正改变你想要做的事情,这是将prc转换为一个数字的目的和测试结果:

var intervalId;
function randomize(){
   var prc = +$("#prc").val();
   //        ^------------------- Note the +, that converts it to a number
   if (isNaN(prc)) {
       // Handle the invalid input
       return;
   }
   var c = 0 ;
   if (!intervalId){
      intervalId = setInterval(function(){
          c = c + 1;
          var attempt = Math.random() * 100;
          if (attempt <= prc){
              clearInterval(intervalId);
              intervalId = false;
              console.log(attempt);
          }
      }, 100);
   }
}
我应该注意,如果输入为空,上面可能会做一些你不想要的事情:它将使用值0,因为+""0。如果你不想这样做,你可以这样做:
var prcString = $.trim($("#prc").val());
var prc = +prcString;
if (!prcString) {
    // Handle the fact they didn't enter anything
    return;
}
if (isNaN(prc)) {
    // Handle the invalid input
    return;
}

因为$("#prc").val()返回一个字符串。50.345.34是一个字符串。当你比较字符串和数字时,js会比较字符串的长度和数值