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
相关产品推荐
相关产品推荐

