Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这种语法是如何工作的?_Javascript_Syntax - Fatal编程技术网

Javascript 这种语法是如何工作的?

Javascript 这种语法是如何工作的?,javascript,syntax,Javascript,Syntax,这个(var i=this.length;i--;)语法构造是如何工作的 应该有三个部分吗?在这种情况下是什么 从。在某个点,i将达到0,这是一个假值,循环结束 更具体地说,在多次迭代之后: 它将检查i并获得1 i将递减并变为0 循环将以i==0运行 它将检查i并获得0 i将递减并变为-1 循环将结束 它将i初始化为this.length,并使用条件检查将其递减。当它达到零时,这是一个错误的值,循环停止 但请注意,由于您在检查中递减,循环从this.length-1开始,在0结束。所以它相当于

这个
(var i=this.length;i--;)
语法构造是如何工作的

应该有三个部分吗?在这种情况下是什么


从。

在某个点,
i
将达到
0
,这是一个假值,循环结束

更具体地说,在多次迭代之后:

  • 它将检查
    i
    并获得
    1
  • i
    将递减并变为
    0
  • 循环将以
    i==0运行
  • 它将检查
    i
    并获得
    0
  • i
    将递减并变为
    -1
  • 循环将结束

它将
i
初始化为
this.length
,并使用条件检查将其递减。当它达到零时,这是一个错误的值,循环停止

但请注意,由于您在检查中递减,循环从
this.length-1开始,在
0结束。所以它相当于:

erase: function(item){
        for (var i = this.length; i--;) {
            if (this[i] === item) this.splice(i, 1);
        }
        return this;
    }

但是请不要使用这种语法,因为它的行为令人困惑——正如您可能已经注意到的那样。

C类语言中的
for
循环由三部分组成:

(初始值设定项
条件
更新)
{…}

然后将循环转换为以下(大致)等效循环(存在差异,但此处不相关):

初始值设定项

while
(条件)
{


更新

}

所以初始化器部分首先运行;然后,只要条件保持为真,循环就会运行,并且在每次迭代结束时,更新部分就会运行。它不必是增量,但最常见的形式如下所示:

(var i = this.length - 1; i >= 0; i--)
for(var i=0;i

但是,您可以将您想要的任何内容写入这些部分,如果您在循环中所做的任何操作都足以使循环正确运行并终止,那么您也可以将它们保留为空。因此,在您的例子中,由于
i--
是一个也会更新
i
的表达式,因此循环只会将条件和更新组合成一个,然后倒计时。

或否<代码>for(;)
提供了一个无限循环。耶+就在我开始写我自己的长答案之前,我发了一篇帖子。请注意,在JavaScript中,所有3个部分都是表达式(从解释角度看,这并没有多大区别)ఠ_ఠ: 谢谢,我更新了。我对JS几乎一无所知,所以我希望Andy能原谅我在这里的技术错误:-)事实上,你称之为增量是对的。至少规范中是这样的。但是我同意NullUserExpection,这个名称不一定有用。不是很相关,但它是一个坏的O(n**2)循环,其中存在一个平凡的O(n)解决方案。循环停止在
0
,但后减运算符将
I
保留在
-1
中,在
for
语句之后。@Ӫ,变量
i
存在于循环外。@NullUserExceptionఠ_ఠ, 我坚持我的立场。我没有说(更准确地说)循环的停止条件是
I==-1
,我说一旦循环停止
I
,它的值是-1,这不是第一句话的意思
i
的值是不相关的,相关的是在条件下计算的值,这肯定不是
i
的值。@davin我不明白你的意思。导致循环停止的原因是
i
到达
0
。因为您使用的是后减量,所以它仅在之后变为
-1
。在循环体中,
i
从来都不是
-1
@NullUserExceptionఠ_ఠ, 我指的是原来的措辞(甚至我读得有点匆忙)。因为答案已经更新了,所以不是很重要。
for (var i = 0; i < something; i++) { ... }