in
使用點一: 在js中,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]); } }
數組也可以用for……in進行遍歷,但是不推薦使用這個。由於for……in遍歷的順序得不到保障,而且如果在Array的原型上添加了屬性,這個屬性也會被遍歷出來。
深入知識點
在使用for in遍歷對象時候,對象有一個重要的方法:hasOwnProperty()。該方法可以在遍歷對象屬性的時候可以過濾掉從原型鏈上下來的屬性。舉例說明:
function testForIn(){ var man={ hands:2, legs:2, head:1 } for(key in man){ //如果不過濾,man對象將會遍歷出clone這個屬性 if(man.hasOwnProperty(key)){ document.write(key+" "); document.write(man[key]); document.write("<br/>"); } } } function keyevent(){ if(event.keyCode==13){ //為全局對象添加一個clone屬性 if(typeof Object.prototype.clone === "undefined"){ Object.prototype.clone = function () {}; } testForIn(); } }
輸出結果:
//未使用hasOwnProperty()方法過濾 hands 2 legs 2 head 1 clone function () {}
//使用hasOwnProperty()方法過濾 hands 2 legs 2 head 1
使用點二:in操作符用來判斷某個屬性屬於某個對象,可以是對象的直接屬性,也可以是通過prototype繼承的屬性。
注意事項:
對於一般的對象屬性需要用字符串指定屬性的名稱 如:
var mycar = {make: "Honda", model: "Accord", year: 1998}; "make" in mycar // returns true "model" in mycar // returns true
對於數組屬性需要指定數字形式的索引值來表示數組的屬性名稱(固有屬性除外,如length)。
// Arrays var trees = new Array("redwood", "bay", "cedar", "oak", "maple"); 0 in trees // returns true 3 in trees // returns true 6 in trees // returns false "bay" in trees // returns false (you must specify the index number, // not the value at that index) "length" in trees // returns true (length is an Array property)
in的右邊必須是一個對象,如:你可以指定一個用String構造器生成的,但是不能指定字符串直接量的形式:
var color1 = new String("green"); "length" in color1 // returns true var color2 = "coral"; "length" in color2 // generates an error (color is not a String object)
如果你使用delete操作符刪除了一個屬性,再次用in檢查時,會返回false,如:
var mycar = {make: "Honda", model: "Accord", year: 1998}; delete mycar.make; "make" in mycar; // returns false var trees = new Array("redwood", "bay", "cedar", "oak", "maple"); delete trees[3]; 3 in trees; // returns false
如果你把一個屬性值設為undefined,但是沒有使用delete操作符,使用in檢查,會返回true.
var mycar = {make: "Honda", model: "Accord", year: 1998}; mycar.make = undefined; "make" in mycar; // returns true var trees = new Array("redwood", "bay", "cedar", "oak", "maple"); trees[3] = undefined; 3 in trees; // returns true