我得到NaN
(不是数字(作为totalPotential
和ratings
的结果,这是代码:
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
输出显示所有变量都是数字(其中很多是零...但这不应该搞砸任何事情(。当涉及的所有变量都是数字时,为什么我会NaN
totalPotentials
和ratings
?
更新我输出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] (; } }