JS报Cannot read property 'toFixed' of undefined 披萨定价计算求助
报错直接原因
你遇到的Cannot read property 'toFixed' of undefined错误是因为代码里的topping变量只做了声明,没有任何赋值操作,默认值为undefined,对undefined调用Number类型的toFixed方法自然会抛出类型错误。
代码存在的其他核心问题
- 变量覆盖:你连续两次给
order变量赋值,第一次用户输入的披萨尺寸直接被第二次输入的配料数覆盖,后续无法获取披萨尺寸信息 - 无效判断:
small、medium、large三个变量仅声明未赋值,默认值为undefined,if (small==5.00)的判断条件永远不成立 - 语法逻辑错误:else分支里的
topping>=1==0.785+topping是无效代码,既没有赋值逻辑,也不符合题目给定的定价规则 - 缺少核心规则实现:没有做配料数最多10份的截断处理,也没有统一叠加13%税费的逻辑
- 输出逻辑错误:最终输出时把
cost和topping两个变量直接拼接,而不是先求和再格式化
修复后完整代码
// 获取用户输入 const pizzaSize = prompt("What size pizza? (small/medium/large)").toLowerCase(); let toppingCount = parseInt(prompt("How many additional toppings?")); // 配料数超过10默认按10计算 toppingCount = Math.min(toppingCount, 10); let baseCost, toppingPerPrice; // 按尺寸匹配定价 switch(pizzaSize) { case 'small': baseCost = 5; toppingPerPrice = 0.75; break; case 'medium': baseCost = 7; toppingPerPrice = 1; break; case 'large': baseCost = 10; toppingPerPrice = 1.25; break; default: document.write("输入的披萨尺寸无效"); throw new Error("无效尺寸"); } // 计算总价:(基底+配料总价)*1.13税费,保留2位小数 const totalCost = (baseCost + toppingCount * toppingPerPrice) * 1.13; document.write(`Total $${totalCost.toFixed(2)}`);
修复说明
- 拆分了披萨尺寸和配料数的存储变量,避免输入被覆盖
- 新增配料数截断逻辑,调用
Math.min确保配料数最高为10 - 用switch判断披萨尺寸,匹配对应的基底价格和单份配料价格
- 统一计算税费后再格式化输出,避免金额拼接错误
内容的提问来源于stack exchange,提问作者caitlinicecream
相关产品推荐
相关产品推荐

