自己經常會搞混淆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...