isNaN() javascript, 带 2 个逗号的数字
isNaN() javascript, number with 2 commas
我正在使用百分比和 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
条件总是 returns true
。
当此输入设置为 50.345.34
之类的数字时,我尝试 console.log(isNaN(prc))
,它总是 returns false
。
为什么它被认为是一个数值?
因为$("#prc").val()
returns一个字符串。 50.345.34
是一个字符串。 当你比较字符串和数字时,js会比较字符串长度和数字值。
But actually if the user set the #prc input to 50.345.34, the attempt <= prc condition always returns 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;
}
我正在使用百分比和 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
条件总是 returns true
。
当此输入设置为 50.345.34
之类的数字时,我尝试 console.log(isNaN(prc))
,它总是 returns false
。
为什么它被认为是一个数值?
因为$("#prc").val()
returns一个字符串。 50.345.34
是一个字符串。 当你比较字符串和数字时,js会比较字符串长度和数字值。
But actually if the user set the #prc input to 50.345.34, the attempt <= prc condition always returns 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;
}