在 Javascript 程序中无法理解?
cannot understand while in Javascript programme?
<html lang="en">
<head>
<title>Chapter 10: Example 1</title>
</head>
<body>
<img src="usa.gif" onclick="changeImg(this)" />
<img src="mexico.gif" onclick="changeImg(this)" />
<script>
var myImages = [
"usa.gif",
"canada.gif",
"jamaica.gif",
"mexico.gif"
];
function changeImg(that) {
var newImgNumber = Math.round(Math.random() * 3);
while (that.src.indexOf(myImages[newImgNumber]) != -1) {
newImgNumber = Math.round(Math.random() * 3);
}
that.src = myImages[newImgNumber];
}
</script>
</body>
</html>
程序作者在代码解释中说:
while 循环的目的是确保您不会 select 与当前图像相同。如果 myImages[newImgNumber]
中包含的字符串在当前图像的 src 属性 中找到,你知道它是相同的并且你需要得到另一个随机 number.You 继续循环直到你得到一个新的图像,此时在现有弧中找不到myImages[newImgNumber]
,indexOf()
方法将返回-1,跳出循环。
我根本无法理解 explanation.Can 任何人都可以换句话说给我解释一下吗?代码来自 Beginning Javascript 5e,Jeremy Mcpeak,Chapter Events.
来自 W3Schools 上的 indexOf():
This method returns -1 if the value to search for never occurs.
循环继续,直到找到有效的 newImgNumber(索引)。
你可以这样看数组:
myImages[0] = "usa.gif";
myImages[1] = "canada.gif";
myImages[2] = "jamaica.gif";
myImages[3] = "mexico.gif";
因此,当您获得 0-3 之间的随机数时,您需要确保幻灯片放映中的下一张图片 src 与当前显示的 src 不同。
- 它生成一个随机数,它将用作
myImages
数组中的索引
myImages[newImgNumber]
将检索随机检索图像的相应名称,
因此它采用此名称并检查它是否与 src
属性中的名称不匹配。
它通过调用 indexOf
来做到这一点,其中 return 是找到传入(参数)字符串的上下文字符串中的索引;如果找不到则 indexOf
returns -1。例如 strA.indexOf(strB);
returns strA 中的索引,其中 strB 存在。
- 所以如果
indexOf
调用 的结果不是 -1 那么当前随机检索的图像名称匹配* src
属性。只有当结果 是 -1 时,此函数才认为它们是不同的名称。
while
循环可能有点难以理解,因为它从头到尾处理问题:它说只要 indexOf
方法 does 找到随机检索的名称,然后它应该随机检索另一个名称并尝试直到 indexOf
does return -1,这暗示这个随机检索的名字是新的。
如果它是一个新名称,那么它将通过 while
循环,然后将其分配给 src
属性。
[*] 使用 indexOf
来确定它们是否是同一图像是非常薄弱的。例如,如果调用了现有的 src
属性,比如 "not-usa.gif",那么上述函数中的条件仍然表明它与 "usa.gif" 同名,这显然是错误的。
Math.random() * 3
给出 0 到 3 之间的数字。myImages[newImgNumber]
给出数组中图像名称之一的名称。例如,如果您调用 changeImg(myImg)
并且 myImg 是 <img src="usa.gif" />
,那么函数内部 that.src
是 "usa.gif"
,that.src.indexOf("usa.gif")
("usa.gif".indexOf("usa.gif")
) 将 return 0,所以循环会继续,你会得到一个新的随机数。在下一次迭代中,它将是 that.src.indexOf("canada.gif")
,它将是 return -1,因为在 "usa.gif" 中找不到 "canada.gif",它将是 return -1 并且它将退出循环。
<html lang="en">
<head>
<title>Chapter 10: Example 1</title>
</head>
<body>
<img src="usa.gif" onclick="changeImg(this)" />
<img src="mexico.gif" onclick="changeImg(this)" />
<script>
var myImages = [
"usa.gif",
"canada.gif",
"jamaica.gif",
"mexico.gif"
];
function changeImg(that) {
var newImgNumber = Math.round(Math.random() * 3);
while (that.src.indexOf(myImages[newImgNumber]) != -1) {
newImgNumber = Math.round(Math.random() * 3);
}
that.src = myImages[newImgNumber];
}
</script>
</body>
</html>
程序作者在代码解释中说:
while 循环的目的是确保您不会 select 与当前图像相同。如果 myImages[newImgNumber]
中包含的字符串在当前图像的 src 属性 中找到,你知道它是相同的并且你需要得到另一个随机 number.You 继续循环直到你得到一个新的图像,此时在现有弧中找不到myImages[newImgNumber]
,indexOf()
方法将返回-1,跳出循环。
我根本无法理解 explanation.Can 任何人都可以换句话说给我解释一下吗?代码来自 Beginning Javascript 5e,Jeremy Mcpeak,Chapter Events.
来自 W3Schools 上的 indexOf():
This method returns -1 if the value to search for never occurs.
循环继续,直到找到有效的 newImgNumber(索引)。
你可以这样看数组:
myImages[0] = "usa.gif";
myImages[1] = "canada.gif";
myImages[2] = "jamaica.gif";
myImages[3] = "mexico.gif";
因此,当您获得 0-3 之间的随机数时,您需要确保幻灯片放映中的下一张图片 src 与当前显示的 src 不同。
- 它生成一个随机数,它将用作
myImages
数组中的索引 myImages[newImgNumber]
将检索随机检索图像的相应名称, 因此它采用此名称并检查它是否与src
属性中的名称不匹配。 它通过调用indexOf
来做到这一点,其中 return 是找到传入(参数)字符串的上下文字符串中的索引;如果找不到则indexOf
returns -1。例如strA.indexOf(strB);
returns strA 中的索引,其中 strB 存在。- 所以如果
indexOf
调用 的结果不是 -1 那么当前随机检索的图像名称匹配*src
属性。只有当结果 是 -1 时,此函数才认为它们是不同的名称。
while
循环可能有点难以理解,因为它从头到尾处理问题:它说只要 indexOf
方法 does 找到随机检索的名称,然后它应该随机检索另一个名称并尝试直到 indexOf
does return -1,这暗示这个随机检索的名字是新的。
如果它是一个新名称,那么它将通过 while
循环,然后将其分配给 src
属性。
[*] 使用 indexOf
来确定它们是否是同一图像是非常薄弱的。例如,如果调用了现有的 src
属性,比如 "not-usa.gif",那么上述函数中的条件仍然表明它与 "usa.gif" 同名,这显然是错误的。
Math.random() * 3
给出 0 到 3 之间的数字。myImages[newImgNumber]
给出数组中图像名称之一的名称。例如,如果您调用 changeImg(myImg)
并且 myImg 是 <img src="usa.gif" />
,那么函数内部 that.src
是 "usa.gif"
,that.src.indexOf("usa.gif")
("usa.gif".indexOf("usa.gif")
) 将 return 0,所以循环会继续,你会得到一个新的随机数。在下一次迭代中,它将是 that.src.indexOf("canada.gif")
,它将是 return -1,因为在 "usa.gif" 中找不到 "canada.gif",它将是 return -1 并且它将退出循环。