问题
I get this error
{ [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' } } }
for this code
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;
}
});
}
};
However, when I logged the typeof self.area, it gives me number. I was testing and realized that by casting it to a Number, it works sometimes. For example, adding this worked and gave no error:
var test = Number(self.area);
self.area = test;
so it looked like
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;
}
});
}
};
However, even simply casting it as a Number earlier gives an error, using a line like
self.area = Number(self.area - oldArea + newArea);
so that it overall looks like
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;
}
});
}
};
still gives the error.
Anyone know what's up?
回答1:
One of oldArea
or newArea
must not be a number.
If you add a number to something like undefined
the result is NaN.
var n = 5;
n = n + undefined;
// n is now NaN
Interestingly, typeof NaN
is 'number'
which can be confusing as its whole purpose is to indicate that it's not a valid number. :-)
来源:https://stackoverflow.com/questions/30966164/getting-a-casterror-nan-for-a-number