簡體   English   中英

JS:遍歷數組(對於…in)

[英]JS: Looping through array (for … in)

為什么在我這樣做

http://jsfiddle.net/xe4Ph/1/

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對象上也具有mapreduce方法,但這不能保證。 不過,大多數JavaScript庫都具有類似的內容(或者可能是each方法)。

在javascript中,

for (var k in {a:1, b:2}) {

不只是遍歷a和b; 它還會遍歷該對象原型的所有成員。 由於函數是javascript中的值,因此包含了Object的所有方法。 有三種方法可以避免這種情況:

  1. 使用k之前檢查obj.hasOwnProperty(k)
  2. 如果要遍歷數組,請使用數組的forEach方法(或您喜歡的javascript庫中的等效方法)
  3. 如果要遍歷數組,請使用for(var i = 0; i <obj.length; i ++)構造(長度僅計算數組的元素)

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM