[英]JS: Looping through array (for … in)
為什么在我這樣做
var footnoteLinks = [1,2,3];
for (var i in footnoteLinks) {
document.write(footnoteLinks[i] + ", ");
}
我得到的是類似...
1,2,3,函數(){返回較低; },函數Array(){[native code]},函數pop(){[native code]},函數push(){[native code]},函數reverse(){[native code]},函數shift() {[本機代碼]},函數sort(){[本機代碼]},函數splice(){[本機代碼]},函數unshift()
這是為什么? 函數的功能等等...我認為它可以正常運行b4,我不知道是什么原因造成的,對於我嘗試過的所有瀏覽器來說似乎都是相同的。 Firefox 3.6,Chrome 6(我認為是),IE9
for(var in obj)
用於迭代對象的屬性。 您將獲得已創建的Array對象的屬性。
您需要更傳統的循環/索引構造:
for(var i=0,z=footnoteLinks.length; i<z; i++)
一些JavaScript運行時在Array對象上也具有map
和reduce
方法,但這不能保證。 不過,大多數JavaScript庫都具有類似的內容(或者可能是each
方法)。
在javascript中,
for (var k in {a:1, b:2}) {
不只是遍歷a和b; 它還會遍歷該對象原型的所有成員。 由於函數是javascript中的值,因此包含了Object的所有方法。 有三種方法可以避免這種情況:
for/in
循環不能用於遍歷數組,因為它還會枚舉用戶定義的屬性(請參閱MDC文檔 )。 在數組對象上和for each/in
循環中for each/in
forEach
方法,但僅在JavaScript 1.6+中可用(=目前尚不可用)。 您可能要使用許多JavaScript框架中的一些,或者編寫自己的實用程序函數來遍歷數組:
function iterate(a, func) {
for (var i=0; i<a.length; i++)
func(a[i]);
}
iterate([1, 2], function(x) { console.log(x) });
克里斯·摩根 ( Chris Morgan)建議,替代韋斯頓C的答案的方法是在for in
循環中使用hasOwnProperty
函數:
for(var i in obj) if(obj.hasOwnProperty(i)) {
document.write(obj[i]);
}
是的,它比使用傳統的for
循環迭代要慢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.