当数组定义为3时,Javascript-forth值的神秘工作不会返回异常
下面的代码在javascript中运行良好当数组定义为3时,Javascript-forth值的神秘工作不会返回异常,javascript,Javascript,下面的代码在javascript中运行良好 var items = [1,2,5] for (var i = 0, item; item = items[i]; i++) { console.log(item = items[i]); } OUTPUT : 1 2 5 我不确定这个计划是如何成功运作的 第四项未定义,在最后一次迭代中将发生什么 我们能用Java创建类似的函数吗 最后的项目[3]在上述功能中如何处理 首先要做两件关键的事情: 首先,在JavaScript中,每当您尝试检索不
var items = [1,2,5]
for (var i = 0, item; item = items[i]; i++) {
console.log(item = items[i]);
}
OUTPUT : 1 2 5
首先要做两件关键的事情: 首先,在JavaScript中,每当您尝试检索不存在的对象属性(包括数组条目)的值时,检索的结果就是值
未定义
第二,当您使用一个像标志这样的值时,比如在if
语句中,或者在for
(或任何其他循环)的的“test”部分中,JavaScript会使用“强制”来表示您过去使用的布尔值。[这不同于(比如)Java,它要求您只使用布尔
变量作为这类标志。]因为JavaScript会这样做,而且会出现很多问题,所以我们使用术语“truthy”(强制为真
)和“false”(强制为假
)对值进行分类。“falsey”值是0
,”
,NaN
,null
,未定义,当然还有false
;所有其他价值观都是真实的
好的,有了这些信息,让我们看看你的循环:
1. i = 0; item = 1; i = 1;
2. item = 2; i = 2;
3. item = 5; i = 3;
4. item = undefined; --> breaks the loop
第四项未定义,在最后一次迭代中将发生什么
只有三次迭代。语句的由三个用分隔的表达式组成代码>,以及循环体。表达式包括初始化、测试和增量:
循环的计算方式如下:
进行初始化
做测试
如果测试为假,则终止
做身体检查
做增量
返回步骤2
循环的的“测试”部分是item=items[i]
,这是一个赋值。赋值表达式的值就是要赋值的值。因此,当i
为3
时,该赋值为item=items[3]
,这实际上是item=undefined
。该赋值的值未定义
,这是一个错误的值,因此循环体不会第四次运行
我们能用Java创建类似的函数吗
是的,除了Java之外,它看起来几乎相同,您使用了一个带有变量的类型,并且您不能(仅仅)使用item=items[i]
作为for
的的“测试”部分(出于同样的原因,您会在下面得到一个异常)
项目[3]
最后,在上述功能中如何处理
你的问题没有任何作用。在循环之后,在JavaScript中,访问项[3]
会得到未定义的(见上文)。在Java中,它会导致一个ArrayIndexOutOfBoundsException
旁注:此行中的=
是一个赋值,而不是一个比较:
console.log(item = items[i]);
如果要比较它们,请执行以下操作:
console.log(item == items[i]);
…这将为您提供输出
true
true
true
符合事实的
符合事实的
正确首先要做两件关键事情:
首先,在JavaScript中,每当您尝试检索不存在的对象属性(包括数组条目)的值时,检索的结果就是值未定义
第二,当您使用一个像标志这样的值时,比如在if
语句中,或者在for
(或任何其他循环)的的“test”部分中,JavaScript会使用“强制”来表示您过去使用的布尔值。[这不同于(比如)Java,它要求您只使用布尔
变量作为这类标志。]因为JavaScript会这样做,而且会出现很多问题,所以我们使用术语“truthy”(强制为真
)和“false”(强制为假
)对值进行分类。“falsey”值是0
,”
,NaN
,null
,未定义,当然还有false
;所有其他价值观都是真实的
好的,有了这些信息,让我们看看你的循环:
1. i = 0; item = 1; i = 1;
2. item = 2; i = 2;
3. item = 5; i = 3;
4. item = undefined; --> breaks the loop
第四项未定义,在最后一次迭代中将发生什么
只有三次迭代。语句的由三个用分隔的表达式组成代码>,以及循环体。表达式包括初始化、测试和增量:
循环的计算方式如下:
进行初始化
做测试
如果测试为假,则终止
做身体检查
做增量
返回步骤2
循环的的“测试”部分是item=items[i]
,这是一个赋值。赋值表达式的值就是要赋值的值。因此,当i
为3
时,该赋值为item=items[3]
,这实际上是item=undefined
。该赋值的值未定义
,这是一个错误的值,因此循环体不会第四次运行
我们能用Java创建类似的函数吗
是的,除了Java之外,它看起来几乎相同,您使用了一个带有变量的类型,并且您不能(仅仅)使用item=items[i]
作为for
的的“测试”部分(出于同样的原因,您会在下面得到一个异常)
项目[3]
最后,在上述功能中如何处理
你的问题没有任何作用。在循环之后,在JavaScript中,访问项[3]
会得到未定义的(见上文)。在Java中,它会导致一个ArrayIndexOutOfBoundsException
旁注:此行中的=
是一个赋值,而不是一个比较:
console.log(item = items[i]);
如果要比较它们,请执行以下操作:
console.log(item == items[i]);
…这会给你