【发布时间】:2021-05-10 22:26:47
【问题描述】:
我试图从用户输入的数字数组中显示最小值、最大值和平均值。
浏览器控制台告诉我 min() 和 max() 不是函数
显示错误:
未捕获的类型错误:max 不是函数
在 HTMLInputElement.onclick (numbers.html:7)
onclick@numbers.html:7
只有 mean 函数起作用,其他的不起作用……为什么??
var i;
var num = new Array();
window.alert("enter 10 numbers:");
for (i = 0; i < 10; i++) {
num[i] = parseInt(prompt("num"));
}
function max() {
var max = num[0];
for (i = 0; i < 10; i++) {
if (max < num[i]) {
max = num[i];
}
}
window.alert("the max is: " + max);
}
function min() {
var min = num[0];
for (i = 0; i < 10; i++) {
if (min > num[i]) {
min = num[i];
}
}
window.alert("the min is: " + min);
}
function mean() {
var mean = 0;
for (i = 0; i < 10; i++) {
mean += num[i];
}
mean = mean / 10;
window.alert("mean : " + mean);
}
<!DOCTYPE html>
<html>
<head>
<title>Numbers</title>
</head>
<body>
<input type="button" value="max" onclick="max()"><br>
<input type="button" value="min" onclick="min()"><br>
<input type="button" value="mean" onclick="mean()"><br>
<script src="numbers.js"></script>
</body>
</html>
【问题讨论】:
-
Uncaught TypeError: lang is not a function 的副本。像
onclick这样的内联事件处理程序是not recommended。它们是一种obsolete, hard-to-maintain and unintuitive 注册事件的方式。总是useaddEventListener。这也是原因之一。 -
min和max分别指的是 字符串HTMLInputElement.prototype.min和HTMLInputElement.prototype.max。 -
这不是您问题的答案,但值得一提的是,在您使用
var的任何地方,您都应该使用let。我会让你跑到兔子洞里找出原因。 -
@SebastianSimon 谢谢你的解释,但同时它有点令人困惑......它将像 max() 这样的函数视为 input 。刹车不是意味着什么吗?
-
@LeonardoT。这很令人困惑,因为您使用的是旧版 DOM 0 事件而不是现代事件侦听器。括号试图将值作为函数调用;他们不会将值转换为函数,也不会“选择”名为“max”或“min”的函数 —
min和max不会引用onclick中的任何函数。
标签: javascript html