在等式中使用所有数字类型时获得 NaN 作为结果 - Javascript/Typescript



我得到NaN(不是数字(作为totalPotentialratings的结果,这是代码:

for (let x in item.rating) {
if(typeof x == 'string') {
console.log("intparsed88888888");
item.rating[x] = parseInt(x);
}
}    
console.log(typeof item.rating.one + "               *((*&*&*&*&^&*&*&*(&*(&*&*(&(&(&*(n" +
typeof item.rating.two + "               *((*&*&*&*&^&*&*&*(&*(&*&*(&(&(&*(n"+
typeof item.rating.three + "               *((*&*&*&*&^&*&*&*(&*(&*&*(&(&(&*(n"+
typeof item.rating.four + "               *((*&*&*&*&^&*&*&*(&*(&*&*(&(&(&*(n"+
typeof item.rating.five + "               *((*&*&*&*&^&*&*&*(&*(&*&*(&(&(&*(fivefiven");
totalPotential = item.rating.one * 5 + item.rating.two * 5 + item.rating.three * 5 + item.rating.four * 5 + item.rating.five * 5;
ratings = item.rating.one + item.rating.two * 2 + item.rating.three * 3 + item.rating.four * 4 + item.rating.five *5;

console.log输出显示所有变量都是数字(其中很多是零...但这不应该搞砸任何事情(。当涉及的所有变量都是数字时,为什么我会NaNtotalPotentialsratings

更新我输出item.rating对象,它们都是NaN的,所以在for循环中出现问题,我将它们从字符串更改为数字。我在上面的代码顶部添加了该部分。

parseInt( x )正在尝试读取前导符号,后跟从提供的值中选择先转换为字符串的数字序列。如果提供的值或其字符串表示形式不符合此期望,则parseInt( x )返回的结果NaN,"不是数字"...这仍然是一个数字,但没有实际值,只是一个数字的类型。

此外,迭代可能会无意中枚举item.ratings派生属性。

根据您的控制台.log您可能想要像这样:

for ( let x in item.rating( { if ( typeof item.ratings[x] === "string" ( { item.ratings[x] = parseInt( item.ratings[x] (; } }

仍然使用for .. in-loop 通常需要额外的小心,因为对象继承如前所述:

for ( let x in item.rating( { if ( item.ratings.hasOwnProperty( x ( && typeof item.ratings[x] === "string" ( { item.ratings[x] = parseInt( item.ratings[x] (; } }

最新更新