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

已将数值转为字符串仍报slice is not a function错误,问题出在哪?

问题排查与修复方案

核心错误原因

你代码里的result.toString.slice(0, 4)是直接引发错误的原因:toString是JavaScript的方法,必须通过()调用才能返回字符串结果,直接写toString只是引用这个方法本身,它不是字符串类型,自然没有slice方法,因此会抛出slice is not a function错误。

额外潜在问题

  • prompt返回的是字符串类型,直接用于数学计算可能得到非预期结果(比如字符串除法会产生NaN),需要先转换为数字类型。
  • 用slice截取字符串的方式不够严谨,比如当BMI结果是整数(如25)时,slice(0,4)会得到25,而如果是小数(如18.345)则得到18.3,用toFixed(2)保留两位小数更适合BMI数值的展示需求。

修复后的代码

var weight = parseFloat(prompt("Enter your Weight"));
var height = parseFloat(prompt("Enter your Height"));
function bmi(weight, height) {
  var result = weight / Math.pow(height, 2);
  // 用toFixed保留两位小数,比字符串截取更适配BMI数值展示
  var count = result.toFixed(2);
  if (result < 18.5) {
    alert("Your result is " + count + ", so you are underweight.");
  } else if (result >= 18.5 && result <= 24.9) {
    alert("Your result is " + count + ", so you have a normal weight.");
  } else {
    alert("Your result is " + count + ", so you are overweight.");
  }
}

bmi(weight, height);

如果坚持使用字符串截取的方式,正确写法应为:

var count = result.toString().slice(0, 4);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:02:09