2015-06-21 52 views
0

我得到這個錯誤得到一個CastError的NaN的數

{ [CastError: Cast to Number failed for value "NaN" at path "area"] 
     message: 'Cast to Number failed for value "NaN" at path "area"', 
     name: 'CastError', 
     kind: 'Number', 
     value: NaN, 
     path: 'area' } } } 

此代碼

MySchema.methods = { 
    updateArea: function (oldArea, newArea) { 
    var self = this; 
    self.area = self.area - oldArea + newArea; 
    return self.save(function (err) { 
     if (err) { 
     console.log(err); 
     return err; 
     } 
    }); 
    } 
}; 

然而,當我登錄將typeof self.area,它給了我號碼。我正在測試並意識到,通過將其轉換爲數字,它有時可以工作。例如,加入這個工作並沒有給出錯誤:

var test = Number(self.area); 
self.area = test; 

所以它看起來像

MySchema.methods = { 
    updateArea: function (oldArea, newArea) { 
    var self = this; 
    self.area = self.area - oldArea + newArea; 
    var test = Number(self.area); 
    self.area = test; 
    return self.save(function (err) { 
     if (err) { 
     console.log(err); 
     return err; 
     } 
    }); 
    } 
}; 

然而,即使是簡單的鑄造它作爲一個號碼前面給出了一個錯誤,用一條線就像

self.area = Number(self.area - oldArea + newArea); 

,使其整體看起來像

MySchema.methods = { 
    updateArea: function (oldArea, newArea) { 
    var self = this; 
    self.area = Number(self.area - oldArea + newArea); 
    return self.save(function (err) { 
     if (err) { 
     console.log(err); 
     return err; 
     } 
    }); 
    } 
}; 

仍然會給出錯誤。

任何人都知道這是怎麼回事?

+0

良好的通話 - 'oldArea'未定義。有趣的是,'self.area'仍然給出了一個數字,當我登錄typeof時,它仍然給出'數字'。你知道這是爲什麼嗎? 另外,如果你想發表你的評論作爲答案,我很高興接受它! –

回答

0

oldAreanewArea之一不能是數字。

如果你添加一個數字到undefined這樣的結果是NaN

var n = 5; 
n = n + undefined; 
// n is now NaN 

有趣的是,typeof NaN'number'這可能會造成混淆它的全部目的就是要表明,它不是一個有效的數字。 :-)

+0

啊,這很有趣,而且很有道理。謝謝! –