자바스크립트에서 함수를 만들어 사용할때 그 함수의 인자에 대한 타입은 암묵적인 약속입니다. 이 말은 “이 함수의 인자의 타입은 … 이다”라는 개념에 지나지 않다는 의미입니다. 그러한 개념에서 벗어나 보다 엄격하게 그 타입을 지키도록 하는 방어책이 필요할때 아래의 예를 참고하고자 이 글로 정리해 둡니다.
function sum(a /* Array */)
{
var isArray = (a instanceof Array);
var isLikeArray = (a && typeof a == "object" && "length" in a);
if(isArray || isLikeArray)
{
var total = 0;
for(var i=0; i {
var element = a[i];
if(!element) continue;
if(typeof element == "number")
total += element;
else
throw new Error("원소는 숫자여야 함");
}
return total;
}
throw new Error("인자는 배열이어야 함");
}
var a = [1,2,3,4,5];
try
{
document.write(sum(a));
}
catch(e)
{
document.write(e.message);
}
3번 코드가 전달 받은 인자의 타입이 배열인지를 확인하는 것이고 4번은 배열과 비슷한 객체인지, 즉 length 프로퍼티를 제공하는지를 확인하는 코드입니다. 14번 코드는 배열의 원소가 숫자인지를 확인하는 코드입니다.
이 코드는 인사이트의 JavaScript 완벽 가이드라는 책의 코드를 조금 변형한 것입니다. 자바스크립트에 관해 좋은 책이라고 생각합니다.
