You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript原型方法返回NaN问题求助

解决你的prixGlobalParPersonne返回NaN问题

刚看完你的代码,发现两个直接导致NaN的关键错误,帮你梳理一下:

1. 变量名拼写不一致(核心原因)

你的构造函数里定义的乘客数量属性是this.nbrAdultes和this.nbrEnfants(注意是nbr前缀),但在原型方法里你写成了this.nbAdultes和this.nbEnfants(少了一个r)!这会导致方法里访问的是未定义的属性,undefined和任何数字运算都会直接得到NaN。

2. 小数点符号用错了

JavaScript里的小数点是英文句号.,你写的0,8会被解析成逗号运算符——这玩意儿会忽略前面的计算结果,直接返回最后一个值8,结合前面的变量错误,整个表达式就彻底变成NaN了。

修正后的完整代码

修正后的原型方法

nouveauVoyage.prototype.prixGlobalParPersonne = function(){ 
    var frais = 0; 
    // 改用严格相等判断,避免隐式类型转换的意外
    if (this.voiturePlaces === 0 && this.hotelPlaces === 0){ 
        frais = 0; 
    } else if(this.voiturePlaces !== 0 && this.hotelPlaces !== 0){ 
        frais = 40; 
    } else {
        // 前面的条件已经覆盖了所有情况,这里可以简化为else
        frais = 20; 
    } 
    // 先计算总人数,提前处理除以0的边界情况
    const totalPersons = this.nbrAdultes + this.nbrEnfants;
    if (totalPersons === 0) {
        return 0; // 也可以根据业务需求抛出错误提示
    }
    // 拆分计算逻辑,更易读也更易调试
    const adultCost = this.nbrAdultes * this.prixParPersonne;
    const childCost = this.prixParPersonne * this.nbrEnfants * 0.8;
    const totalCost = adultCost + childCost + frais;
    
    return totalCost / totalPersons; 
};

额外优化建议

  • 坚持用===/!==做相等判断,避免隐式类型转换带来的奇怪问题
  • 把复杂计算拆分成小变量,调试时单独打印每个变量的值会更方便
  • 增加边界情况处理(比如总人数为0),避免后续再出现类似NaN问题

内容的提问来源于stack exchange,提问作者PostMaloneM3m3r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:49:25