DEV/BugReport
[JavaScript] replace is not a function 오류
무사뎀벨레
2023. 1. 4. 11:28
JavaScript의 replace함수를 사용하던 와중
아래와 같은 경고문이 노출되며 작동되지 않았습니다.
오류메시지 노출
아래 코드와 같이 매개변수로 들어오는 값의 html 태그를 치환시키기 위한 함수를 사용 중이었습니다.
escapeHtml = function( text ) {
var map = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
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 = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
//return text.replace(/[&<>"']/g, function(m) { return map[m]; });
return text.toString().replace(/[&<>"']/g, function(m) { return map[m]; });
};
또한 인코딩이 지정되지 않으면 원시 버퍼가 반환되기 때문에 발생하는 오류이기도 하기 때문에 replace함수는 원시 버퍼가 아닌 인코딩 처리한 문자열로 처리되어야 하는 함수입니다.
반응형