Ter*_*apt 5 javascript random numbers percentage setinterval
我正在使用百分比,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);
}
}Run Code Online (Sandbox Code Playgroud)
<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"/>Run Code Online (Sandbox Code Playgroud)
但实际上,如果用户将#prc输入设置为50.345.34,则attempt <= prc条件始终返回true.我尝试console.log(isNaN(prc))将此输入设置为类似的数字50.345.34并始终返回false.
为什么它被视为数值?
但实际上,如果用户将#prc输入设置为50.345.34,则尝试<= 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);
}
}
Run Code Online (Sandbox Code Playgroud)
我应该注意,如果输入为空,上面的内容可能会做你不想要的事情:它会使用值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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
548 次 |
| 最近记录: |