鍍金池/ 問答/HTML/ JavaScript,for (variable in value),每次循環(huán)時

JavaScript,for (variable in value),每次循環(huán)時,會不會重新計算value的值?

我們知道,每次進入循環(huán)時,會重新計算variable的值。
那么,會不會重新計算value的值呢?特別當value的值在循環(huán)體中被修改時。

var arry=[12,34.56,true,"hello",null,undefined,{}];
var i=0,brry=[];
for (brry[i] in arry){
    arry[i]= arry[i]+brry[i];
    i++;
}
console.log(arry);
console.log(brry);
回答
編輯回答
痞性

沒有明白你說的和你代碼 有什么關系的?

2017年2月26日 14:09
編輯回答
墨染殤

這個是一定會的。javascript數(shù)組類型本質上是一個Object, 不管在哪里更改,都會改變它的值本身。加入你不確定,你可嘗試寫一個代碼驗證好了:

for(i in arry) {
  array[i] = 'test'
  console.log(arry)
}
2017年5月2日 12:01
編輯回答
玩控

題主的問題,可以抽象成:

for in 循環(huán)中給數(shù)組插入新值,會不會陷入死循環(huán)?

像下面的代碼:

var arr = [0, 1, 2]
var i
for (i in arr) {
  arr.push(4)
  console.log(arr[i])
}

事實證明是不會的,推理一下么,這里的 arrfor (i in arr)時,僅僅給所有的屬性拍了個快照,所以上面代碼可能等價于:

var arr = [0, 1, 2]
var i
var keys=Object.keys(arr)
for (i in keys) {
  arr.push(4)
  console.log(arr[i])
}

沒有查規(guī)范是怎么說的,但應該類似,這種問題測試一下就知道了,也沒必要查規(guī)范,如果想查的話,自己動手查下吧。

另外,for (brry[i] in arry){這種用法我是第二次看到,

雖然我知道是為了同時獲得index,key,value

但這個代碼可讀性我覺得不好,

  • 多了一個全局變量brry,
  • 多了一行i++

遍歷數(shù)組的屬性

for (i in arr) {

完全可以了,即使用來遍歷對象。

var obj={x:1,y:2}
var i,keys=Object.keys(obj)
for (i in keys) {
  console.log(i,keys[i],obj[keys[i]])
}

這樣也是可以的,或者直接用ES5的數(shù)組操作方法也是可以的。

var obj={x:1,y:2}
Object.keys(obj).forEach(function(key,index){
    console.log(key,index,obj[key])
})
2017年10月8日 02:30