2013-08-23 7 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

을 시도해보십시오

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

더 내 블로그에 for-in에 대해. –

+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); 
}); 

(누군가가 실제로 매우 장난 꾸러기 있었고 Object.prototype에 열거 속성을 추가하지 않는 한 당신의 literal 어떤 열거 상속 된 속성을 가지고 있지 않습니다하지만) 당신은 상속 된 속성을 처리하지 않도록하려면 : Myths and realities of for..in

+1

'가치, 열쇠'=>'열쇠, 가치'($. 각의 jQuery 디자인 과실) – David

+0

@David : 감사합니다. 이상하게도, 일반적으로 객체를 처리 할 때 순서를 기억합니다 (그러나 배열을 처리 할 때는 물론 순서는 동일 함). –

-1

내가 객체 리터럴 표시되지 않습니다이

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

'key = escape (value);'아니요 ...... –

+0

변수가 참조로 전달되지 않습니다. –

+0

이 경우에도 키가 변경됩니다. 값. @ 밴데쉬 : 올바른 답변을 보려면'$ .each'를 사용하십시오. (내 dv가 아님) –

관련 문제