使用for循环循环遍历数组的函数调用不起作用,请帮忙
Function call using a for loop to cycle through array not working, Help please
我是 Javascript 的新手,但我有一个问题,我花了一整天的时间试图研究和解决,想自己解决,但我很困惑。
我的代码很简单,我创建了 5 个函数,1 个字母测试,1 个数字测试,1 个左括号和 1 个右括号,第 5 个点是句号。这些功能 return 正确。
然后我创建了一个函数来根据在文本字符串中找到的内容在需要时调用所有这些函数来生成数字输出。
回到顶部,我有一个字符串,我使用拆分创建了一个数组,将字符串中的每个字符放入数组中的单独地址。这个想法是我使用for循环滚动数组并将类型输出到标识中,然后将其输出到列表中。
问题是它会循环一次然后崩溃,我找不到问题,问题出在以下行:
identity = isWhat(ModCompound[x],ModCompound[y]);
使用 // 删除它并且 for 循环运行正常。
我想知道为什么?什么错误?
代码:(原始表格)
<!DOCTYPE html>
<!--
Sjb 19/03/2015
-->
<html>
<head>
<title></title>
</head>
<body>
Chemicals
</br>
Compound: <input id="compound" value="NaCl.2(H20)">
<script>
var identity;
var x;
Compound = document.getElementById('compound').value;
ModCompound = Compound;
ModCompound = ModCompound.split('');
for (i = 0; i < Compound.length; i++){
x = i;
y = i;
document.write(i);
identity = isWhat(ModCompound[x],ModCompound[y]);
document.write(Math.random() + " : " + identity + "</p>");
}
ModCompound= ModCompound.join('');
// Custom Functions
function isWhat(n1,c1) //OUTPUT 1,2,9,0,8
{
if (isLetter(n1,c1) === true) {
return isWhat = 1;
//document.write = "L";
} //OUTPUT 1
if (isNumber(n1,c1) === true) {
return isWhat = 2;
//document.write = "N";
} //OUTPUT 2
if (isOpenBracket(n1,c1) === true){
return isWhat = 9;
//document.write("OB");
} //OUTPUT 9
if (isClosedBracket(n1,c1) === true) {
return isWhat = 0;
//document.write = "CB";
} //OUTPUT 0
if (isFullStop(n1,c1) === true) {
return isWhat = 8;
//document.write = "FS";
} //OUTPUT 8
}
function isNumber(n, c) //OUTPUT(s) TRUE
{
if (n >= 0 || n <= 9 ) {
//document.write(n + " N " + c + "</p>");
return isNumber = true;
}
}
function isLetter(n, c)
{
n = n.charCodeAt(0);
if (((n >= 65) && (n <= 90)) || ((n >= 97) && (n <= 122))) {
//document.write(n + " L " + c + "</p>");
return isLetter = true;
}
}
function isOpenBracket(n,c)
{
if (n === "(") {
//document.write(n + " OB " + c + "</p>");
return isOpenBracket = true;
}
}
function isClosedBracket(n,c)
{
if (n === ")") {
//document.write(n + " CB " + c + "</p>");
return isClosedBracket = true;
}
}
function isFullStop(n,c)
{
if (n === ".") {
//document.write(n + " F " + c + "</p>");
return isFullStop = true;
}
}
</script>
</body>
</html>
您的 return 语句应该是这样的:
return 1;
您正在写这个:
return isWhat = 1;
这就是将变量 isWhat
设置为 1
,然后 return 对其进行设置。但是,isWhat
是一个函数,所以将它设置为 1
就不能调用它(因为现在它是一个数字,而不是一个函数)。此外,无需键入 var===true
,因为如果变量为真,则 var
将计算为 true
,而 if
语句将计算为 运行。
我是 Javascript 的新手,但我有一个问题,我花了一整天的时间试图研究和解决,想自己解决,但我很困惑。
我的代码很简单,我创建了 5 个函数,1 个字母测试,1 个数字测试,1 个左括号和 1 个右括号,第 5 个点是句号。这些功能 return 正确。
然后我创建了一个函数来根据在文本字符串中找到的内容在需要时调用所有这些函数来生成数字输出。
回到顶部,我有一个字符串,我使用拆分创建了一个数组,将字符串中的每个字符放入数组中的单独地址。这个想法是我使用for循环滚动数组并将类型输出到标识中,然后将其输出到列表中。
问题是它会循环一次然后崩溃,我找不到问题,问题出在以下行:
identity = isWhat(ModCompound[x],ModCompound[y]);
使用 // 删除它并且 for 循环运行正常。
我想知道为什么?什么错误?
代码:(原始表格)
<!DOCTYPE html>
<!--
Sjb 19/03/2015
-->
<html>
<head>
<title></title>
</head>
<body>
Chemicals
</br>
Compound: <input id="compound" value="NaCl.2(H20)">
<script>
var identity;
var x;
Compound = document.getElementById('compound').value;
ModCompound = Compound;
ModCompound = ModCompound.split('');
for (i = 0; i < Compound.length; i++){
x = i;
y = i;
document.write(i);
identity = isWhat(ModCompound[x],ModCompound[y]);
document.write(Math.random() + " : " + identity + "</p>");
}
ModCompound= ModCompound.join('');
// Custom Functions
function isWhat(n1,c1) //OUTPUT 1,2,9,0,8
{
if (isLetter(n1,c1) === true) {
return isWhat = 1;
//document.write = "L";
} //OUTPUT 1
if (isNumber(n1,c1) === true) {
return isWhat = 2;
//document.write = "N";
} //OUTPUT 2
if (isOpenBracket(n1,c1) === true){
return isWhat = 9;
//document.write("OB");
} //OUTPUT 9
if (isClosedBracket(n1,c1) === true) {
return isWhat = 0;
//document.write = "CB";
} //OUTPUT 0
if (isFullStop(n1,c1) === true) {
return isWhat = 8;
//document.write = "FS";
} //OUTPUT 8
}
function isNumber(n, c) //OUTPUT(s) TRUE
{
if (n >= 0 || n <= 9 ) {
//document.write(n + " N " + c + "</p>");
return isNumber = true;
}
}
function isLetter(n, c)
{
n = n.charCodeAt(0);
if (((n >= 65) && (n <= 90)) || ((n >= 97) && (n <= 122))) {
//document.write(n + " L " + c + "</p>");
return isLetter = true;
}
}
function isOpenBracket(n,c)
{
if (n === "(") {
//document.write(n + " OB " + c + "</p>");
return isOpenBracket = true;
}
}
function isClosedBracket(n,c)
{
if (n === ")") {
//document.write(n + " CB " + c + "</p>");
return isClosedBracket = true;
}
}
function isFullStop(n,c)
{
if (n === ".") {
//document.write(n + " F " + c + "</p>");
return isFullStop = true;
}
}
</script>
</body>
</html>
您的 return 语句应该是这样的:
return 1;
您正在写这个:
return isWhat = 1;
这就是将变量 isWhat
设置为 1
,然后 return 对其进行设置。但是,isWhat
是一个函数,所以将它设置为 1
就不能调用它(因为现在它是一个数字,而不是一个函数)。此外,无需键入 var===true
,因为如果变量为真,则 var
将计算为 true
,而 if
语句将计算为 运行。