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

时间:2017-08-12 23:25:48

标签: javascript typescript

NaNtotalPotential的结果是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输出显示所有变量都是数字(其中很多都是零......但不应该弄乱任何东西)。当所涉及的所有变量都是数字时,为什么NaNtotalPotentials获得ratings

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

1 个答案:

答案 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] );
  }
}