只遍歷出JScript物件的expando屬性

2021-09-22 13:11:48 字數 967 閱讀 5861

我們知道jscript的物件(不只是object)可以像html元素物件一樣,新增任意的自定義屬性值。也就是說jscript的物件,天生都是key/value map。並且這種map結構由於使用native的**實現,檢索效率非常之高,我曾在

這篇文章裡討論過。不過在遍歷這樣的map時,expando匯入屬性和prototype匯入屬性存在了混淆。

由於jscript的prototype特性對物件的擴充非常的方便,所以我們在製作一些jscript類庫的時候,一般都會使用prototype特性為物件新增方法,比如我們對object進行如下prototype擴充:

function() {};

function() {};

function(){};

這個時候如果再使用object作為map結構來使用,我們就會遇到遍歷這個map的錯誤,看下面的**:

遍歷這個集合:

return values;

}display(objmap);

我們發現,在values裡的值居然是:

function(){},

function() {},

function() {},1.abc,2.def,3.ghi,4.jkl。真是鬱悶

for in 語句的效果,jscript也就是這麼設計的,我們沒有辦法改變。那麼我門能不能只取出objmap中expando進去的屬性呢?

由於prototype屬性的優先順序很高,在物件例項生成的時候就expand到物件例項中去了。所以我們建立的任何乙個物件,都會包含相同的prototype屬性。這樣一來就好辦了,我們把objmap中的prototype屬性找出來過濾掉就行了唄。參考**如下:

function getexpandovalues(map)

}return values;

}getexpandovalues(objmap);

獲得結果為:1.abc,2.def,3.ghi,4.jkl

json物件的遍歷

json 有兩種結構 1 物件 jsonobject 屬性 值 得集合。var json for var obj in json 2 陣列 jsonarray 由值組成的有序列表。var json jack mike tom 20,true for var i 0 i json.length i 復...

HashMap物件的遍歷

假設map是hashmap的物件,對map進行遍歷可以使用下面兩種方式 第一種 得到元素的集合,然後進行運算,元素型別是map.entry。object o map.entryset toarray 得到元素集合,然後轉換成陣列 map.entry x for int i 0 i第二種 先得到所有元...

js物件的遍歷

1 什麼是遍歷 所謂遍歷就是在資料的集合中進行逐一獲取或檢視,就好像是乙個盒子裡有十個球,乙個個拿出來放在桌面上一樣。2 如何遍歷 2.1 陣列其實就是乙個物件,有序的集合,可以根據索引遍歷,索引從0開始,按照順序到length 1結束 例 var arr hello 4,5,6,world for...