遍歷陣列通常使用for迴圈,es5的話也可以使用foreach,es5具有遍歷陣列功能的還有map、filter、some、every、reduce、reduceright等,只不過他們的返回結果不一樣。但是使用foreach遍歷陣列的話,使用break不能中斷迴圈,使用return也不能返回到外層函式。
array.prototype.method=
function
()
var
myarray=[1,2,4,5,6,7]
myarray.name=
"陣列"
for
(
var
index
in
myarray)
使用for in 也可以遍歷陣列,但是會存在以下問題:
1.index索引為字串型數字,不能直接進行幾何運算
2.遍歷順序有可能不是按照實際陣列的內部順序
3.使用for in會遍歷陣列所有的可列舉屬性,包括原型。例如上栗的原型方法method和name屬性
所以for in更適合遍歷物件,不要使用for in遍歷陣列。
那麼除了使用for迴圈,如何更簡單的正確的遍歷陣列達到我們的期望呢(即不遍歷method和name),es6中的for of更勝一籌.
array.prototype.method=
function
()
var
myarray=[1,2,4,5,6,7]
myarray.name=
"陣列"
;
for
(
var
value of myarray)
記住,for in遍歷的是陣列的索引(即鍵名),而for of遍歷的是陣列元素值。
for of遍歷的只是陣列內的元素,而不包括陣列的原型屬性
method
和索引name,不能遍歷物件,只能遍歷陣列、map、set等結構的資料。
因為能夠被for...of正常遍歷的,都需要實現乙個遍歷器iterator。而陣列、字串、set、map結構,早就內建好了iterator(迭代器),它們的原型中都有乙個symbol.iterator方法,而object物件並沒有實現這個介面,使得它無法被for...of遍歷
遍歷物件 通常用for in來遍歷物件的鍵名
object.prototype.method=
function
()
var
myobject=
for
(
var
key
in
myobject)
f
or in 可以遍歷到myobject的原型方法method,如果不想遍歷原型方法和屬性的話,可以在迴圈內部判斷一下,hasownpropery方法可以判斷某屬性是否是該物件的例項屬性
for
(
var
key
in
myobject)
}
同樣可以通過es5的object.keys(myobject)獲取物件的例項屬性組成的陣列,不包括原型方法和屬性。
object.prototype.method=
function
()
var
myobject=
object.keys(myobject).foreach(
function
(key,index))
for of 與 for in的區別
1 2 3 4 5 6 7 8 array.prototype.method function varmyarray 1,2,4,5,6,7 myarray.name 陣列 for varindexinmyarray 使用for in 也可以遍歷陣列,但是會存在以下問題 1.index索引為字串型數...
for in與for of的區別
1.遍歷物件的可列舉屬性名 enumerable true,通過object.defineproperty obj,prop,descriptor 修改,通過obj.propertyisenumerable prop 進行判斷 2.向上查詢原型鏈中的屬性 如僅想遍歷自身屬性,加一層if,通過haso...
for of 與 for in的區別
遍歷陣列通常使用for迴圈,es5的話也可以使用foreach,es5具有遍歷陣列功能的還有map filter some every reduce reduceright等,只不過他們的返回結果不一樣。但是使用foreach遍歷陣列的話,使用break不能中斷迴圈,使用return也不能返回到外層...