为什么类型不起作用,但 isNaN 有效?



为什么这个块不起作用? 我使用了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,那么这有效,但不是这个,为什么?我的数组如下所示:

{"100", "200", "Asdasdadsa", "1"}

因为typeof NaN"number"

console.log(typeof NaN);

NaN是数字类型的特殊值*,而不是其自己的类型。

您尚未显示使用isNaN的代码,但请注意,如果您将字符串传递到isNaN中,它将在测试之前隐式转换为 number,以查看这样做的结果是否NaN(就好像您已经调用了Number(x),或应用了一元+或任何非加法数学运算 [-*/等))。

分别:

  • 请注意,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;
}

(这确实支持科学记数法,但只是作为在移交给内置数字转换之前仅检查空白字符串的副产品。

将其应用于您的代码:

// I assume totalWorth is already a number
var entry = parseIntStrict(returnedArr[count]);
if (!isNaN(entry)) {
totalWorth = totalWorth + entry;
}

* 从技术上讲,根据 IEEE-754 JavaScript 使用的标准,NaN是一系列值中的任何一个,都意味着"不是一个数字"。

这是因为数组中您认为是数字的值实际上是字符串。例如,100 是一个数字,但"100"是一个字符串。typeof 123 将返回"number",但 typeof '123' 将返回 'string'。 这意味着数组中的所有值都是字符串类型,如果使用该方法,代码将不会输入 if 语句。 但是,由于 isNaN 检查元素是否不是数字,因此您的代码将使用该元素。

最新更新