为数字

时间:2015-06-21 15:26:02

标签: javascript mongodb mongoose

我收到此错误

{ [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;
      }
    });
  }
};

然而,当我记录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;
      }
    });
  }
};

仍然会出错。

任何人都知道了什么?

1 个答案:

答案 0 :(得分:0)

oldAreanewArea中的一个不得为数字。

如果您为undefined之类的内容添加号码,则结果为NaN

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

有趣的是,typeof NaN'number',这可能令人困惑,因为它的全部目的是表明它不是有效数字。 : - )