除了原因之外,我发现了以下内容:
var lines = ["Line 1", "Line 2", "Line 3"], i = 0, line;
for (line[i]; i < lines.length; line = lines[i++]) {
console.log(line); //Outputs "Line 1" three times
}
for (line[i]; i < lines.length; i++, line = lines[i]) {
console.log(line); //Outputs "Line 1", "Line 2", "Line 3"
}
唯一的区别是将最终表达式语句中的i ++分成两个用逗号分隔的语句(谁想到了这个语法,BTW?!不应该用分号分隔多个语句并包含在{ ,就像我们在其他地方使用的那样?我离题了......)那么是什么给了Javascript?当你回绕那个循环时,line = lines [i ++]对你来说太复杂了吗?
之前有人问为什么我不能把line = lines [i]放在循环的顶部:因为第一个例子很优雅。它使事物分离。
所以我的问题是:为什么,Javascript,为什么?
答案 0 :(得分:1)
您发布的代码无法运行。
每个for循环的开头
for (line[i];
毫无意义。
也许你的意思
for (line = lines[i];
var lines = ["Line 1", "Line 2", "Line 3"], i = 0, line;
for (line = lines[i]; i < lines.length; line = lines[i++]) {
console.log(line); //Outputs "Line 1" three times
}
i = 0;
for (line = lines[i]; i < lines.length; i++, line = lines[i]) {
console.log(line); //Outputs "Line 1", "Line 2", "Line 3"
}
&#13;
在这种情况下,案例1打印
line 1
line 1
line 2
案例2打印
line 1
line 2
line 3
至于为什么,i++
表示
temp = i;
i = i + 1;
return temp;
所以在第一种情况下如果i = 0这部分
line = lines[i++]
将是这个
line = lines[0], i = i + 1
因为temp
实际上意味着i++
的实例0
,所以i++, line = lines[i]
使用了i++
。
而在第二种情况下
++i
你在使用
之前做了后增量要清楚var lines = ["Line 1", "Line 2", "Line 3"];
// use a function
lines.forEach(function(line) {
console.log(line);
});
// use a function with arrow syntax
lines.forEach(line => {
console.log(line);
});
// and of course if you really want to use indices why is
// this not elegant?
for (let i = 0, len = lines.length; i < len; ++i) {
const line = lines[i];
console.log(line);
}
这称为后递增。表达式的值是之前的值增加。
如果你的意思是增量而不是 postincrement ,请使用 private void btn_Login_Click(object sender, EventArgs e)
{
connection.Open();
OleDbCommand command= new OleDbCommand();
command.Connection=connection;
command.CommandText="Select * from EmployeeData where Username ='"+txt_Username.Text+"' and Password='"+ txt_Password.Text+"'";
OleDbDataReader reader= command.ExecuteReader();
int count=0;
while(reader.Read());
{
count =count+1;
}
if (count == 1)
{
MessageBox.Show("Username and password is correct");
}
else if(count > 0)
{
MessageBox.Show("Username or password is NOT correct");
}
connection.Close();
}
至于优雅,那是一种观点。我们不清楚你要做什么,并且肯定有理由使用基于索引的循环,但以防万一其他方式迭代
iterator = iter(a)
while True:
try:
a[-1] = next(iterator)
print a[-1]
except StopIteration as e:
break
&#13;
我不清楚为什么你认为你的解决方案很优雅。我会看看你的解决方案并认为它是晦涩难懂的。换句话说,它难以理解,难以理解并不优雅。
答案 1 :(得分:0)
Javascript For Final Expression不允许使用复杂的语句。为什么呢?
你回答了自己的问题。 final-expression 是表达式,而不是语句。这就是语言的设计方式。它可以追溯到四十年前C中的逗号运算符,如果没有进一步的话。
如果您想在line
内分配for
,可以这样编写循环:
const lines = [1, 2, 3];
for (let i = 0, line; line = lines[i], i < lines.length; i++) {
console.log(line);
}
&#13;