为什么这个块不起作用?我使用了isNaN(),但这不起作用,为什么? Javascript表现得很奇怪。
if( (typeof parseInt(returnedArr[count]) == 'number')
{
totalWorth= parseInt(totalWorth)+ parseInt(returnedArr[count]);
//document.write(returnedArr[count]);
}
代码:
function addWorth()
{
var table1= document.getElementById("tableNetWorths");
var rowCount1= table1.rows.length;
//var row1= table1.insertRow(rowCount1);
var arr= [];
for(var count = 0; count < rowCount1; count++)
{
arr.push(table1.rows[count].cells[1].innerHTML);
}
arr.shift();
return arr;
}
function showWorthSum()
{
var returnedArr= addWorth();
//returnedArr.push(addWorth());
totalWorth= 0;
var arrCount= returnedArr.length;
for(var count = 0; count < arrCount; count++)
{
if( (typeof parseInt(returnedArr[count]) == 'number')
{
totalWorth= parseInt(totalWorth)+ parseInt(returnedArr[count]);
//document.write(returnedArr[count]);
}
}
return parseInt(totalWorth);
}
如果我使用的是isNaN那么有效但不是这个,为什么?我的数组看起来像这样:
{&#34; 100&#34;,&#34; 200&#34;,&#34; asdasdadsa&#34;,&#34; 1&#34;}
答案 0 :(得分:1)
因为typeof NaN
是"number"
:
console.log(typeof NaN);
&#13;
NaN
是数字类型的特殊值*,而不是它自己的类型。
您还没有显示使用isNaN
的代码,但请注意,如果您将字符串传递给isNaN
,则会在测试之前将其隐式转换为数字,以查看结果这样做是NaN
(就像你在其上调用了Number(x)
,或者应用了一元+
或任何非加法数学运算[-
,{{1 }},*
等等。)。
单独:
/
会愉快地解析只有启动的字符串,并忽略其后面不是数字的部分。例如,parseInt
为parseInt("123abc")
。123
将从字符串中推断数字基数(基数),因此parseInt
为parseInt("0x10")
。在处理用户输入时,有意识地处理这两种情况通常是最好的:
16
(请注意,并非尝试支持科学记数法输入;用户通常不会输入它。)
浮点数:
function parseIntStrict(str) {
str = str.trim();
if (!/^\d+$/.test(str)) {
return NaN;
}
return parseInt(str, 10);
}
( 支持科学记数法,但仅作为在切换到内置数字转换之前仅检查空字符串的副产品。)
将其应用于您的代码:
function parseFloatStrict(str) {
str = str.trim();
if (!str) {
return NaN;
}
return +str;
}
*从技术上讲,根据IEEE使用的IEEE-754标准,// I assume totalWorth is already a number
var entry = parseIntStrict(returnedArr[count]);
if (!isNaN(entry)) {
totalWorth = totalWorth + entry;
}
是一系列值中的任意一个,而不是数字。&#34;
答案 1 :(得分:-2)
这是因为您认为数字的数组中的值实际上是字符串。例如,100是一个数字,但是&#39; 100&#39;是一个字符串。 typeof 123将返回&#39; number&#39;,但typeof&#39; 123&#39;将返回&#39;字符串&#39;。 这意味着如果使用该方法,则数组中的所有值都是字符串类型,并且您的代码不会输入if语句。 但是,由于isNaN检查某个元素是否不是数字,因此您的代码将使用该代码。