2014-06-20 56 views
-1

我現在是JavaScript和學習的新手。 我正在使用for/in來打印一個對象的屬性和每個屬性的值。 但我只能打印屬性而不打印屬性值。在for循環中打印對象的屬性值

代碼片段:

var obj = {x:1,y:2,z:3} 
var disp_obj = function(obj){ for(p in obj) console.log(p, obj.p) } 
disp_obj(obj) 

,輸出是: X未定義 Ÿ不確定 ž不確定

,我可以從輸出看到的,只有屬性名稱是打印,但不是它的值。 請糾正我這有什麼問題?在托架訪問符號here

+1

使用'OBJ [P]'代替'obj.p',因爲在後一種情況下,它作爲裸字和不經處理標。 –

+0

'obj.p'表示獲得'obj'的屬性'p'。你需要的是'obj [p]'這意味着獲得名稱存儲在'obj'的變量'p'中的屬性。 –

+0

好吧,明白了。所以如果對象'obj'有一個名爲'p'的屬性,它會打印出來。 –

回答

1

如果你想訪問使用變量的值對象的屬性,你必須使用括號標記,而不是點符號:

var dispObj = function(o) 
{ 
    for (var p in o) 
     console.log(p, o[p]); 
}; 

疲勞,但:你dispObj創建一個全局變量p,因爲您省略了var關鍵字。也試圖嚴格編碼標準,JS功能是駝峯式的。
通常,您的簡單for...in循環將執行得很好,但在某些情況下,您最終可能會記錄從原型鏈中涓涓細流的屬性。是的話,建議,以確保您只記錄對象的屬性:

for (var p in o) 
    if (o.hasOwnProperty(p)) 
     console.log(p, o[p]); 
0

變化

var disp_obj = function(obj){ for(p in obj) console.log(p, obj.p) } 

var disp_obj = function(obj){ for(var p in obj) console.log(p, obj[p]) } 

更多信息。

+0

謝謝,我也可以問爲什麼'var p'是必需的,不能只'p'在'for'就足夠了嗎? –

+0

不聲明變量使其成爲全局變量(或者在外部範圍中刪除一個變量),這是導致錯誤的主要原因。想象一下,你是從你的循環調用另一個函數也使用p並將其聲明爲全局? –

3

當你的對象引用後使用.p,也不會使用變量p評價是,它總是會得到該名爲"p"

使用括號語法使用字符串來訪問屬性:

console.log(p, obj[p]);