2013-08-23 57 views
0

如何在JS中轉義對象的所有屬性?轉義對象的所有屬性

var literal = { 
    valid:'thisIsAValidValue', 
    toEscape:'ThîsStringNéédsToBéEscàped' 
}; 

//Does not work 
escape(literal) 

//Does not work either, how to loop over attributes? 
$.each(literal.attributes, function(){ 
    this = escape(this); 
}); 
+0

我沒有看到一個對象常量。 –

+2

@AnttiHaapala:你不?我做。規範的術語是* object initializer *,但「object literal」是一個通用的同義詞。 –

+1

@AnttiHaapala:哇。 –

回答

3

首先,你真的確定要escape?這是一箇舊的,棄用的功能。

但在任何情況下,代碼的形式不會改變,無論什麼樣的功能調用轉換值:

var key; 
for (key in literal) { 
    literal[key] = escape(literal[key]); 
} 

或者使用jQuery的$.each,因爲你似乎是使用jQuery:

$.each(literal, function(key, value) { 
    literal[key] = escape(value); 
}); 

如果你想確保不處理繼承屬性(雖然你的literal不會有任何枚舉繼承屬性,除非有人一直很調皮事實上,並增加了枚舉屬性爲Object.prototype) :在我的博客

var key; 
for (key in literal) { 
    if (literal.hasOwnProperty(key)) { 
     literal[key] = escape(literal[key]); 
    } 
} 

更多for-inMyths and realities of for..in

+1

'value,key' =>'key,value'(jQuery設計錯誤$ .each) – David

+0

@David:謝謝。這很奇怪,通常我在處理對象時記得這個順序(但是在處理數組時與它作鬥爭,儘管它當然是相同的順序)。 –

-1

試試這個

$.each(literal, function(key,value){ 
     literal[key] = escape(value); 
    }); 
+0

'key = escape(value);'沒有...... –

+0

這不起作用,變量在這裏不是通過引用 –

+0

即使它們是,這也會改變* key *,而不是值。 @Vandesh:看到我的答案,正確的方式來使用'$ .each'。 (不是我的dv) –

相關問題