已将数值转为字符串仍报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
相关产品推荐
相关产品推荐

