Javascript 循环和值

标签 javascript

我的书说了一些东西,但我不完全确定它的意思。它说为了确保循环正确执行,您需要包含一些代码来更改条件表达式的值? 这意味着什么?那是对的吗?我可能读错了,但是当你有一个像

这样的基本 Javascript 循环时
 if(contactsCount > 0) {
        for (i = 0; i < contactsCount; i = i + 1){

           var item = object[i],
               name = item.name,
               email = item.email;
           target.innerHTML += '<p><a href=mailto:' + email + '">' + name + '</a>!</p>;
}
}
})();

您肯定不会更改任何值以使其正常工作吗?我对此很陌生,所以我有点一无所知。

最佳答案

...you need to include some code to change the value of the conditional expression? What does that mean?

这是一个坏主意:

var i = 0;
while (i < 10) {
    doSomething(i);
}
为什么?因为循环永远不会结束。 i的值永远不会改变。无限循环是一种典型的错误形式。

所以这本书说的是,您必须提供一种改变循环条件( i < 10 )的方法(例如,通过修改 i 的值)。

有点偏离,但是:

有时您会看到条件似乎无法改变的循环,例如:

while (true) {
    // ...
}

如果您发现自己想要做类似的事情,请停下来并尝试找到更好的方法。上面的用例非常罕见,它们看起来像这样:

while (true) {
    doThis();
    doThat();
    if (someCondition) {
        break;
    }
    doAnotherThing();
}

...所以在这种情况下,控制条件实际上在中间,循环语句本身并不是真正的条件。这几乎总是不好的做法,但在极少数情况中,它们可能是正确的做法。

<小时/>

It also says that you can have other statements on the same line as the "if statement", is that right?

是的,确实如此。 JavaScript 根本不关心行(除非它为您执行一种称为“自动分号插入”的纠错形式;那么行就很重要,因为换行符代表分号,作为纠错的一部分)算法)。所有这些都是有效的,并且它们都做同样的事情:

// 1
if (a < b) {
    alert("a is less than b");
    foo();
}
// 2
if (a < b) { alert("a is less than b"); foo(); }
// 3
if (a < b)
{
    alert("a is less than b");
    foo();
}
// 4
if (a < b)
{ alert("a is less than b");
  foo; }

因为 JavaScript 根本不关心行,它们只是样式问题。

到目前为止,上述最常见的样式是 #1。

另外,如果控制流语句的主体中只有一个语句,则该 block ( {...} )是可选的。它们做同样的事情:

// 1
if (a < b) {
    alert("a is less than b");
}
// 2
if (a < b) 
    alert("a is less than b");
// 3
if (a < b) alert("a is less than b");

所以使用{...}从技术上讲,正文中的单个陈述也是风格问题。然而,在实践中,始终使用 block 可以减少代码中的错误。如果您遗漏了这些 block ,那么当您添加第二个语句但忘记添加 block 时,它最终会咬住您:

if (a < b) 
    alert("a is less than b");
    foo();

在上面,foo() 总是被调用,因为它不在 if 的主体中。该代码执行以下操作:

if (a < b) {
    alert("a is less than b");
}
foo();

关于Javascript 循环和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32210137/

相关文章:

javascript - 更改当前 URL 的简单方法

javascript - 从父窗口关闭子窗口

javascript - 添加 js 确认到 mailto 链接

javascript - z-index 将元素放在另一个元素下方,即使它更高

javascript - 如何更改范围 slider 的轨道颜色?

javascript - 如何在 emberjs 的 handlebars foreach 循环中仅为第一个元素设置类

javascript - Ruby Watir 或 JavaScript : Get 5 first elements of a section

javascript - 从 JavaScript 中的 switch cases 中删除死代码

javascript - 在 parse.com 中使用回调函数时如何保留范围?

javascript - 不等待函数的异步方法 - VUE