본문 바로가기
BugReport

[JavaScript] replace is not a function 오류

by 무사뎀벨레 2023. 1. 4.

 

 

 

 

JavaScript의 replace함수를 사용하던 와중
아래와 같은 경고문이 노출되며 작동되지 않았습니다.

 

 

 

 

 

 

 

오류메시지 노출


 

 

아래 코드와 같이 매개변수로 들어오는 값의 html 태그를 치환시키기 위한 함수를 사용 중이었습니다.

escapeHtml = function( text ) {
    var map = {
        '&': '&',
        '<': '&lt;',
        '>': '&gt;',
        '"': '&quot;',
        "'": '&#039;'
    };
    return text.replace(/[&<>"']/g, function(m) { return map[m]; });
};

 

replace함수replace를 하려고 하는 데이터가 parseInt, 즉 숫자일 때에 오류가 발생합니다.

 

 

 

 

 

오류 해결


이러한 오류가 발생한다면 매개변수를 문자열로 교체한 뒤 replace 하게 되면 정상적으로 오류를 해결할 수 있습니다.

 

return text.replace(/[&<>"']/g, function(m) { return map[m]; }); 구문에서

 

매개변수로 전달되는 text를 문자화시켜주기 위해 toString 함수를 사용하여 return text.toString().replace(/[&<>"']/g, function(m) { return map[m]; });로 수정하였습니다.

escapeHtml = function( text ) {
    var map = {
        '&': '&amp;',
        '<': '&lt;',
        '>': '&gt;',
        '"': '&quot;',
        "'": '&#039;'
    };
    //return text.replace(/[&<>"']/g, function(m) { return map[m]; });
    return text.toString().replace(/[&<>"']/g, function(m) { return map[m]; });
};

 

 


또한 인코딩이 지정되지 않으면 원시 버퍼가 반환되기 때문에 발생하는 오류이기도 하기 때문에 replace함수는 원시 버퍼가 아닌 인코딩 처리한 문자열로 처리되어야 하는 함수입니다.

반응형

댓글