了解数组中的循环
Understanding Loops in Arrays
试图理解这一点及其工作原理。基本上,目标是让用户输入密码以"获得访问权限"。这是代码,但我正在努力准确地理解它。
真的有几个问题:1.为什么输出首先被声明为无访问,为什么不是其他如果不起作用?2.如果有人能解释I=0,我对整个Loop函数的工作原理感到非常困惑;userPassword.length>i;i++
function btnCheckCode_onclick()
{
// assign textbox elements to variables for easier access
var userInputTextbox = document.getElementById("txtCode");
var outputTextbox = document.getElementById("txtOutput");
var userInput = userInputTextbox.value
var userPassword = ["Admin", "Secret", "Letmein", "abc123", "qwerty"];
var output = "Sorry, No Access";
for(i = 0; userPassword.length > i ; i++ )
{
if(userPassword[i] == userInput)
{
output = "Welcome Privileged User";
}
}
userInputTextbox.value = userInput
outputTextbox.value = output
}
它循环遍历密码数组,查看是否与给定密码匹配。
-
它使用I作为计数器,并将其初始化为0。
-
每次循环运行时都会评估下一部分,以检查循环是否应该继续。在这种情况下,只有当i小于密码长度时,它才会继续。
-
每次运行循环时,i++部分都会增加循环计数器。
话虽如此,请不要在任何地方使用此代码。在客户端中不应该检查密码。每个人都可以看到这个代码,绕过这个检查非常简单。
循环之前设置output
的值:
var output = "Sorry, No Access";
并且仅当环路内的条件发生变化时
userPassword[i] == userInput
计算为CCD_ 2。因此,你的第一个问题的答案是,你正在自己设定特定的初始值。
关于第二个问题,循环结构的参数:
i = 0; i < userPassword.length; i++
定义为:
variable = initial value; variable < limit; increment variable after iteration
换句话说,您声明变量i
并将其设置为0
;你告诉解释器只要i
的值小于极限值,或者特别是userPassword
数组的长度,就要迭代;并且在每次迭代之后将CCD_ 7添加到CCD_。
在第一循环迭代i=0
内部并且在其之后为i=1
。由于userPassword
的长度是5
,因此循环将继续。在第二次迭代之后,i == 2
,并且循环继续直到i == 5
。由于CCD_ 15的5个索引被识别为CCD_。
for循环正在遍历userPassword数组。数组的长度现在是5,但将来可能会改变。使用数组的长度作为条件的一部分意味着,如果使数组变长或变短,就不必更改循环。
对于循环,您需要一个将充当迭代器的变量:i
。数组中的项的索引范围从0到1,小于数组的总长度。您希望迭代器i
的值从数组的开头0开始,一直到末尾。
在您的情况下,循环的结束也是数组的结束,它由您的条件定义:userPassword.length > i
当您有类似true
0的东西时,它表示数组在此索引处保持的值——在循环过程中,i
将被一个整数替换。在循环中,您将逐个索引迭代,并将该索引处的数组中的值与用户输入的值进行比较,直到迭代器达到条件定义的极限。
对于第一个问题,通常在函数开始时初始化每个变量。在函数运行之前,output
可能是任何东西,但通过用消息初始化output
,就不会有试图处理未定义变量的风险。
此for指令是一个循环,它遍历可能的用户密码列表,并将其与输入的密码进行比较,如果匹配,则更改输出:
// assign textbox elements to variables for easier access
var checkPassword = function () {
var userInputTextbox = document.getElementById("txtCode");
var outputTextbox = document.getElementById("txtOutput");
var userInput = userInputTextbox.value;
var userPassword = ["Admin", "Secret", "Letmein", "abc123", "qwerty"];
var output = "Sorry, No Access";
for(i = 0; i < userPassword.length; i++ )
{
if(userPassword[i] == userInput)
{
output = "Welcome Privileged User";
}
}
outputTextbox.innerHTML = output;
}
<input id="txtCode" value="Admin">
<div id="txtOutput"> </div>
<button onclick="checkPassword()">Check</button>
-
因为如果用户没有键入任何字符串"Admin"、"Secret"、"Letmein"、"abc123"、"qwerty",则输出之后不需要设置为"Sorry,No Access",因为这是默认值。
-
i=0:是i的起始值,userPassword.length>iuserPassword.length是数组中的元素数=>5i++意味着在每次迭代之后,将i设置为i+1
循环只检查用户输入是否与userPassword数组中的一个字符串匹配。如果匹配,则输出将设置为"Welcome Privileged user"。问题是,如果用户键入"Admin",循环也会检查其他四个值。
userPassword.some(password => {
if(password == userInput){
output = "Welcome Privileged User";
}
return password == userInput;
});
if(userPassword[i] == userInput) {
output = "Welcome Privileged User";
} else {
output = "Sorry, No Access";
}
我添加了其他,现在让我们检查变体:
0 iteration: true -> output = "Welcome Privileged User";
1 iteration: false -> output = "Sorry, No Access";
2 iteration: false -> output = "Sorry, No Access";
3 iteration: false -> output = "Sorry, No Access";
4 iteration: false -> output = "Sorry, No Access";
因此,输出="对不起,没有访问权限">(但我们有真正的迭代(。这是因为如果条件为false
,则else语句重写变量输出。
当我们为循环在之前定义输出时,只有当条件if(userPassword[i] == userInput)
返回true
时,输出才能更改值。所以,这个变体是正确的。
关于循环的。for循环通常是您想要创建循环时使用的工具。
for循环具有以下语法:
for (statement 1; statement 2; statement 3) {
code block to be executed
}
在您的情况下:
for(i = 0; userPassword.length > i ; i++ ) {
code block to be executed
}
语句1在循环开始之前设置一个变量(var i=0(。
语句2定义循环运行的条件(userPassword.length必须大于i(。
语句3每次执行循环中的代码块时都会增加一个值(i++(。
对于循环,在内部有if语句。
if(userPassword[i] == userInput) {
output = "Welcome Privileged User";
}
数组userPassword = ["Admin", "Secret", "Letmein", "abc123", "qwerty"]
的每个元素与userInput:进行比较
if(userPassword[0] == userInput) => if("Admin" == userInput)
if(userPassword[1] == userInput) => if("Secret" == userInput)
if(userPassword[2] == userInput) => if("Letmein" == userInput)
if(userPassword[3] == userInput) => if("abc123" == userInput)
if(userPassword[4] == userInput) => if("qwerty" == userInput)
如果其中一个条件返回true
,则我们为变量输出设置"Welcome Privileged User">。如果所有条件都是false
,我们保留定义值"对不起,无法访问">。
一句话:
for(i = 0; i < userPassword.length; i++)
这种语法更有用,更容易理解。
你可以在这里找到一些例子:JavaScript For Loop
- 如何将angularjs中的javascript字符串输出为循环数组
- 如何从某个位置顺时针和逆时针循环数组
- 赢得't循环数组javascript
- 通过循环数组内容
- 使用RegExp循环数组而不是for循环(Javascript)
- 如何在背景图像的循环数组中预加载图像
- 如何在循环数组内部推送变量值
- Javascript循环数组无限不起作用
- 如何循环数组
- 如何使用Handlebars循环数组对象和模板
- PHP同时循环数组数据显示到javascript中
- 如何使用上一个/下一个功能循环数组中的图像
- 如何循环数组并保持它们之间的索引增长
- Javascript循环数组以查找可被3整除的数字
- 以变量作为属性的循环数组
- 嵌套的“for”循环 - 数组未定义
- 在具有主干和车把的模型中循环数组
- 数组在 for 循环与第二个 for 循环数组 JavaScript 合并
- 对于javascript和jquery的循环数组问题
- 在循环数组 javascript 后替换对象属性值中的字符串