for of 和 for in 的一些區別

2021-10-09 15:33:45 字數 1623 閱讀 1480

自己經常會搞混淆for of 和for of 的區別以及用法,所以記錄一下,方便以後忘記了,可以回來看看

for...in語句以任意順序遍歷乙個物件的除symbol以外的可列舉屬性。

用法:

for (variable in object)
variable

在每次迭代時,variable會被賦值為不同的屬性名。

非symbol型別的可列舉屬性被迭代的物件。

如果你只要考慮物件本身的屬性,而不是它的原型,那麼使用 

getownpropertynames()

或執行 

hasownproperty()

來確定某屬性是否是物件本身的屬性(也能使用

propertyisenumerable

)。或者,如果你知道不會有任何外部**干擾,您可以使用檢查方法擴充套件內建原型。

for in遍歷陣列的毛病

1.index索引為字串型數字,不能直接進行幾何運算

2.遍歷順序有可能不是按照實際陣列的內部順序

3.使用for in會遍歷陣列所有的可列舉屬性,包括原型。例如下面例子中的原型方法methods和name屬性

array.prototype.methods=function()

var myarray=[1,2,4,5,6,7]

myarray.name="陣列";

for (var value in myarray)

所以for ... in是為遍歷物件屬性而構建的,不建議與陣列一起使用,陣列可以用array.prototype.foreach()for ... of

它最常用的地方應該是用於除錯,可以更方便的去檢查物件屬性(通過輸出到控制台或其他方式)。儘管對於處理儲存資料,陣列更實用些,但是你在處理有key-value資料(比如屬性用作「鍵」),需要檢查其中的任何鍵是否為某值的情況時,還是推薦用for ... in。 

for...of語句在可迭代物件(包括 array,map,set,string,typedarray,arguments 物件等等)上建立乙個迭代迴圈,呼叫自定義迭代鉤子,並為每個不同屬性的值執行語句

用法:

for (variable of iterable)
variable

在每次迭代中,將不同屬性的值分配給變數。

iterable

被迭代列舉其屬性的物件。

let iterable = [10, 20, 30];

for (let value of iterable)

// 11

// 21

// 31

對於for...of的迴圈,可以由break, throw  continue    或return終止。在這些情況下,迭代器關閉。

總結:

for in 和 for of 的對比

fon in和for of最大的區別就是 乙個是對鍵名key的遍歷,乙個是對鍵值value的遍歷 使用for in也能遍歷陣列,但會存在一些問題 index索引為字串型數字,不能直接進行幾何運算 和遍歷順序物件的行為一樣,使用for in會遍歷陣列所有可列舉的屬性,所以原型物件上的方法和屬性也會被遍...

for of 和 for in 的區別

var obj for var key of obj 出錯 uncaught typeerror obj is not iterablevar obj for var key in obj 結果是 a b cvar arr 3 5,7 for var i in arr 結果是 0 1 2var ar...

for in 和for of的區別

es5的話也可以使用foreach,es5具有遍歷陣列功能的還有map filter some every reduce reduceright等,只不過他們的返回結果不一樣。但是使用foreach遍歷陣列的話,使用break不能中斷迴圈,使用return也不能返回到外層函式。array.proto...