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

React Native Expo计算器计算后backspace()报错:undefined is not a function

问题:React Native Expo计算器退格功能报错“undefined is not a function”

计算出结果后点击退格按钮调用backspace()函数时,会触发undefined is not a function错误,问题出在代码第91行setCalcText(calcText.slice(0, -1))。

错误原因

核心问题是**calcText的类型不一致**:

  • 初始状态和输入数字/符号时,calcText是字符串类型;
  • 调用calculateResult()时,eval(resultText)返回的是数字类型,直接赋值给calcText后,它变成了数字;
  • 数字类型没有slice()方法,所以退格时调用calcText.slice()会抛出“undefined is not a function”错误。

修复方案

1. 确保计算结果转为字符串

修改calculateResult函数,将eval的结果转为字符串后再设置给calcText:

const calculateResult = () => {
  try {
    // 将计算结果转为字符串,保证calcText始终为字符串类型
    setCalcText(String(eval(resultText)));
  } catch(err){
    alert(err)
  }
};

2. 完善退格函数的边界处理

修改backspace函数,处理退格后文本为空的情况,同时确保操作的是字符串:

const backspace = () => {
  if (calcText === "0") return;
  
  // 处理calcText退格,空值时设为"0"
  const newCalcText = calcText.slice(0, -1) || "0";
  setCalcText(newCalcText);
  
  // 处理resultText退格,空值时设为空字符串
  const newResultText = resultText.slice(0, -1) || "";
  setResultText(newResultText);
};

3. 额外检查其他状态赋值

确认其他设置calcText的地方都使用字符串类型,比如memoryRecall中setCalcText(memory),因为memory在memoryPlus和memoryMinus里已经通过String()转换为字符串,所以无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:43:24