DEV/BugReport

[JavaScript] replace is not a function 오류

무사뎀벨레 2023. 1. 4. 11:28

 

 

 

 

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함수는 원시 버퍼가 아닌 인코딩 처리한 문자열로 처리되어야 하는 함수입니다.

반응형