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 + " *((*&*&*&*&^&*&*&*(&*(&*&*(&(&(&*(fivefive\n");
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
循环中出现错误,我将它们从字符串更改为数字。我在代码顶部添加了上面的部分。
答案 0 :(得分:1)
ngDoCheck(){
this.restaurants = this._restaurantService.restaurants;
}
正在尝试读取一个前导符号,后跟一个提供值的数字序列,可选择首先转换为字符串。如果提供的值或其字符串表示不符合此预期,则parseInt( x )
返回的结果为parseInt( x )
,"不是数字" ......这仍然是一个数字,但是没有实际值的数字,只是数字的类型。
此外,您的迭代可能会无意中枚举NaN
的派生属性。
根据你的console.log你可能想要某事。像这样:
for ( let x in item.ratings ) { if ( typeof item.ratings[x] === "string" ) { item.ratings[x] = parseInt( item.ratings[x] ); } }
仍然使用item.ratings
- 循环通常需要额外的注意,因为对象继承如前所述:
for ( let x in item.ratings ) { if ( item.ratings.hasOwnProperty( x ) && typeof item.ratings[x] === "string" ) { item.ratings[x] = parseInt( item.ratings[x] ); } }