當前位置:才華齋>設計>網頁設計>

javascript中for/in迴圈以及常見的使用技巧

網頁設計 閱讀(1.77W)

JavaScript 支援不同型別的迴圈:

javascript中for/in迴圈以及常見的使用技巧

for - 迴圈程式碼塊一定的次數

for/in - 迴圈遍歷物件的屬性

while - 當指定的條件為 true 時迴圈指定的程式碼塊

do/while - 同樣當指定的條件為 true 時迴圈指定的程式碼塊

1. in運算子:要求其左邊的運算數是一個字串,或可以被轉換為字串,右邊的運算數是一個物件或陣列。如果該運算子左邊的.值是右邊物件的一個屬性名,則返回true。

例如:

var point={x:1,y:2}; //物件直接量 var has_x="x" in point; //返回true var has_z="z" in point; //返回false var ts="toString" in point;//返回true,toString為繼承方法

2. for/in語句:語法,

for (variable in object)

statement;

提供了一種遍歷物件屬性的方法。

例:

for(var prop in my_object) { e("name:"+prop+";value:"+my_object[prop],"
"); }

javascript的陣列是一種特殊的物件,因此for/in迴圈可以像列舉物件屬性一樣列舉陣列下標。

可以把一個物件的所有屬性名複製到一個數組中,

例:

var o= {x:1,y:2,z:3}; var a=new Array(); var i=0; for (a[i++] in o) ;//空語句,用於初始化陣列

3. in運算子與for/in語句不同,for/in語句in的左邊可以是宣告一個變數的var語句,陣列的一個元素或者是物件的一個屬性,不能使字串。

4. 陣列常用的存取屬性運算子是“[]”,而不是“.”。使用“[]”來命名屬性名師字串值,是動態的,可以在執行時改變,而不是一個識別符號“.”。

例:

var stock_name= get_stock_name_from_user();//從使用者處獲取股票名 var share= get_number_of_shares();//得到股票數量 portfolio[stock_name]= share;//動態地建立陣列股票,併為每支股票賦值 將該例子與for/in迴圈一起使用,當用戶輸入了他的投資組合,可以計算當前總值 var value= 0; for (stock in portfolio) { value +=get_share_value(stock)*portfolio[stock]; }

stock存取的是每支股票的名字。

portfolio[stock]存取的是每支股票的數量。

for-in迴圈

功能:遍歷物件屬性,把屬性名和屬性值都提出來

var obj = { "key1":"value1", "key2":"value2", "key3":"value3"};function EnumaKey(){ for(var key in obj ){ alert(key); }}function EnumaVal(){ for(var key in obj ){ alert(obj[key]); }}EnumaKey(obj)//key1 key2 key3EnumaVal(obj)//value1 value2 value3

陣列也可以這樣遍歷,但不推薦,因為不能保證順序,而且如果在Array的原型上添加了屬性,這個屬性也會被遍歷出來。

for-in迴圈應該用在非陣列物件的遍歷上,使用for-in進行迴圈也被稱為“列舉”。

技術上將,你可以使用for-in迴圈陣列(因為JavaScript中陣列也是物件),但這是不推薦的。因為如果陣列物件已被自定義的功能增強,就可能發生邏輯錯誤。另外,在for-in中,屬性列表的順序(序列)是不能保證的。所以最好陣列使用正常的for迴圈,物件使用for-in迴圈。