【问题标题】:Function returns NaN when it shouldn't函数不应该返回 NaN
【发布时间】:2018-10-11 10:48:31
【问题描述】:

为什么 myTodos.meetDone() 函数返回 Nan? 它当然是 js,我只是定义了一个名为 myTodos 的对象,我只想打印 console.log() 结果。

let myTodos = {
    day: 'Monday',
    meetings: 0,
    meetDone: 0,


    addMeeting: function (num) {
        this.meetings = this.meetings + num;
    },
    meetDone: function (num) {
        this.meetDone = this.meetDone - num;
    },
    resetDay: function () {
        this.meetings = 0;
        this.meetDone = 0;
    },
    report: function () {
        let meetleft = this.meetings + this.meetDone;
        return `Yo have ${meetleft} meeting for today!`;
    },
}

myTodos.addMeeting(2);
myTodos.addMeeting(5);
myTodos.meetDone(23);

console.log(myTodos);

console.log(myTodos.report());

第一个 console.log 用于调试 为什么它会返回 Nan 我不明白这个!!!!

【问题讨论】:

  • meetDone 是一个函数也是一个值
  • 将函数 meetDone 重命名为它的作用,这样它就不会与属性冲突。 removeFromMeetDone 或类似的。
  • 您这样做是否有理由而不是使用class

标签: javascript function object web nan


【解决方案1】:

正如@AndrewBone 在他的评论中已经提到的,您的对象有两个属性,称为meetDone。后一个覆盖第一个,因此当您添加 this.meetings + this.meetDone 时,您正在向 Number 添加一个函数,这会导致显示 NaN。更改其中一个属性的名称,meetingDonemeetDone IMO 更具描述性

let myTodos = {
    day: 'Monday',
    meetings: 0,
    meetDone: 0,


    addMeeting: function (num) {
        this.meetings = this.meetings + num;
    },
    meetingDone: function (num) {
        this.meetDone = this.meetDone - num;
    },
    resetDay: function () {
        this.meetings = 0;
        this.meetDone = 0;
    },
    report: function () {
        let meetleft = this.meetings + this.meetDone;
        return `Yo have ${meetleft} meeting for today!`;
    },
}

myTodos.addMeeting(2);
myTodos.addMeeting(5);
myTodos.meetingDone(23);

console.log(myTodos);

console.log(myTodos.report());

【讨论】:

  • 或您喜欢的任何其他名称,例如“addDoneMeeting”,因为这就是您正在做的事情
猜你喜欢
  • 2013-07-15
  • 2022-06-12
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 2019-04-24
  • 1970-01-01
  • 2021-08-06
相关资源
最近更新 更多