골때리는 자바스크립트의 세계 완결

실무에서 .NET과 자바스크립트의 조합으로 아주 뻘짓을 하고 있습니다.

닷넷한다면서 왜 별명이 JSPSCHOOL이냐면 ASPSCHOOL 보고 그냥 따라한것 뿐입니다.ㅋ

닷넷한다면서 태요에서 놀지 왜 여기서 노냐고 물으신다면. 지금 이 사이트를 방문하시덩가.

http://www.php-compiler.net/

대망도 아닌 대망의 골때리는 자바스크립트가 오늘로써 마지막 탄이 됐습니다.

오늘 그래서 아주 스펙터클하게 막을 내릴까 합니다. 아주 스펙터클하게 허무한 팁이죠.ㅋ

자바스크립트에서 많이들 다루는 부분은 어느 언어나 마찬가지겠지만 바로 타입이죠.

그러면서 암시적 변환할 때도 있고 명시적 변환할때도 있고 뭐.. 있죠.

오늘은 실무에서 알면 좋은 형변환 팁을 알려드리고자 합니다.

내용의 일부는 여기서도 소개된 팁이기도 합니다. 되새기는 느낌도 되겠죠?

먼저 문자열부터 다뤄보도록 하겠습니다.

일단 문자열은 뭐 많이들 쓰죠.어느 타입이나 문자열로 얼마든지 형변환 가능하죠.

그렇다고 해서 bool.replace(‘fa’,’tu’) 이렇게 하면 당연히 메서드 없다고 오류 납니다.

문자열은 암시적 변환은 불가능하니 당연히 명시적으로 형변환을 해야겠죠.

일단 자바스크립트에서 문자열로 형변환하는 내장 메서드는 toString() 입니다.

네. 문자열 클래스에도 toString()이 있습니다. 그래서…

‘string’.toString().toString().toString().toString().toString().toString().toString() …

이렇게 하면 변함없이 ‘string’이 출력되죠.

자바스크립트에서는 + 연산자에 앞 또는 뒤에 문자열이 들어가면 게임오버입니다. 바로 문자열로 변환해버리죠. 그래서 + 연산자를 숫자와 혼용하려 쓰려면 괄호를 씌워줘야 합니다.

이건 당연한 규칙이니 다들 주의하고 있겠죠. 그래서 이렇게 형변환하면 되겠습니다.

var a=false;

var b=a+”;

이렇게 하면 a는 어쩔수없이 toString() 메서드를 작동시켜 해당 타입에 맞는 문자열 값을 보내줍니다.

var a;

var b=a+”;

이렇게 하면 어떻게 될까요? 따로 무슨 말이 필요할까요. 그냥 undefined 나오는거죠. 거기서 undefined 란 이 문자열을 이제 문자열로 취급하여 컨트롤을 시작합니다. 그래서!

var a;

var b=a+”;

alert(b==undefined);//false

즉, 아무리 null이던 정의 안하던 문자열로 변환하는 순간 신세계(?)가 펼친다는 점 유의하시고 형변환을 하시기 바랍니다.

참, 그리고 가장 원시적인 객체 object 객체에는 toString 메서드가 있습니다. 그래서 어떤 타입이나 클래스던
모두 문자열로 표현하는 toString 메서드가 있죠. 익명 객체(JSON) 같은거? 일단 toString()의 기본 본문은
[object]를 출력하는게 그 목적입니다. 하지만 재정의를 하면 원하는 문자열로 출력할 수 있습니다. 내장객체는 대부분 재정의를
해놨죠. Date 객체 생성 후 toString 하면 날짜가 나오는 식으로요. 물론 직접 정의하거나 만든 객체도 재정의
가능합니다. 그냥 toString 멤버를 붙이고 함수로 만든 다음에 원하는 문자열 값으로 반환하면 됩니다. 별거 아니죠?

부울값

부울값은 true와 false 둘뿐입니다. 참과 거짓을 따지는 원시적인 타입이죠.

자바스크립트에서는 다른 타입을 부울로 따지려면 어떻게 해야 하는지 먼저 알아볼까요?

String : 빈 문자열이나 null은 false, 값있으면 true

Number : null이나 0이면 false, 그 외 숫자는 true, NaN이면 false, 하지만 무한상수 Infinity는 true.

그 외 객체 : 객체 본문이거나 객체 인스턴스가 생성되면 true. null이거나 선언 안되면 false.

뭐.. 그닥 흔히 쓰고 중요한 약속인거죠. 이걸 암시적으로 형변환을 해도 상관은 없습니다.

이런식으로요.

var a=’b’;

if(a){alert(a);}else{alert(‘뭥미’);}

네. 맞습니다. 기본적으로 그렇게 되있긴 하죠.

하지만 이건 약속에 의한 조건식일 뿐, 그대로 다른 곳에 갔다 쓰기엔 좀 그렇죠.

자바스크립트에서의 암시적 변환은 “잠시뿐” 이란 성격입니다. if문 같은 곳에는 위와 같은 약속을 정의해서 참과 거짓을 따지고 그 후로는 다시 자신의 타입으로 작동을 하기 때문이죠.

그렇다면 참과 거짓의 여부를 재대로 저장할 수 없나요? 당연하죠.

그래서 요리왕 비룡에서 요리를 맛볼때의 느낌을 살려서 명시적으로 형변환을 하면 됩니다.

var a=’b’;

if(!!a){alert(a);}else{alert(‘뭥미’);}

이렇게 하면 완전한 부울값으로 조건식을 체크합니다. 그리고 부울 변수에도 당연히 써먹을 수 있고, == 같은 논리
연산자에서 부울값으로 작용합니다. 그래서 피연산자가 어떤 타입이던 일단 잠시동안 부울값으로 암시적 변환 후 논리를 계산하게
되는거죠.

숫자

변수로 태어나서 재대로된 형을 만나보지 못하고 활동하다 지는게 바로 자바스크립트 변수입니다. 문자열로 갔다가 숫자로 갔다가 배열로 갔다가 왔다갔다 할수 있으니까요.

뭐.. 그런 등의 지나친 유연성이 자바스크립트의 매력이기도 하죠.

문자열 안에 있는 숫자를 변환하려면 parseInt나 parseFloat을 씁니다. 일단 문자열이 숫자로 시작하면 해석을
시작해 숫자로 변환해주죠. 중간에 문자가 들어가면 거기까지 해석합니다. 만약 문자가 첫글자부터 있다? 그럼 없는줄 알고 NaN이
나옵니다. 문자열 없으면 당연히 해석 못하죠.

그래서 ID 체크에 영문자가 먼저 들어갔는지 여부를 체크하는 조낸 간단한 식이 여기있습니다.

if(parseInt(value)!=NaN){

    alert(‘첫번째 문자는 반드시 영어로 해 주삼.’);

}

숫자는 여러가지 연산자를 쓸 수가 있습니다. 기본적인 사칙연산부터 증감 연산자도요.ㅋ

그 중에서 + 연산자는 문자열에도 써먹기 때문에 문자열이 중간에 들어가면 문자열이 우선적으로 먹혀들면서 피연산자가 모두 문자열로 변환하죠. 그렇게 되면 연산은 개뿔이 되는 거죠.

하지만 + 외의 연산자는 숫자에만 있습니다. 그래서 –/ 이 세개의 연산자가 들어가면 문자열이 아닌 숫자가 우선시
되는겁니다. 그래서 문자열이 들어가면 그 문자열을 숫자로 해석하는 시도를 합니다. 숫자가 아니면? 당연히 NaN이 나옵니다. 만약
문자가 숫자 연산에 중간에 들어갔다? 연산 다 집어치우고 NaN이 나옵니다. 숫자는 암시적 형변환은 없습니다. 명시적으로
해줘야죠. 이렇게요.

‘123’-0 //123

‘456’
1 //456

‘789’/0 //Infinity

쉽죠? parseInt 언제 다씁니까?

그리고 숫자는 양수와 음수가 있죠. 피연산자가 없는 + – 연산자는 곧 이넘은 숫자니 숫자로 양수와 음수로 표현해달라
입니다. + 연산자의 경우 피연산자가 문자열이면 문자열부터 합쳐버리지만, 피연산자가 없으면 얘는 그때부터 숫자인생을 펼칠 수
있습니다.

그래서 이렇게 명시적 형변환을 해도 되는거죠.

+’123′ //123

-‘456’ //-456

그리고 부울값. 아까도 말했듯이 0이면 false, 그 외 숫자는 true인거 아시죠?

이걸 역이용해서 숫자로 표현할 수 있습니다. 명시적 형변환을 이렇게 합니다.

+true //1

+false //0

-true //-1

-!false //-1(==-true)

이렇게 허무해서 골때리는 팁을 마무리로 골때리는 자바스크립트의 세계 이것으로 마치도록 하겠습니다.

1탄부터 나오고 머리 지끈거리면 번외편 나오다가 며칠 꿇다가 이렇게 10탄까지 여기 사이트에 게시를 하고 나니까 속이 후련한건지 아닌건지.

지금까지 골때리는 자바스크립트를 봐주셔서 감사합니다. 많이 골때리셨나요? 아니라구요? 그러면 저한테 오시면 제가 골을 때려 드립니다.

너무나도 획기(?)적인 스크립트 언어인 javascript. 이녀석이 Ajax(AJAX로 쓰면 바보취급받습니다.
그럼나도여태까지 바보였음ㅋ) 기법이 소개된 이후 이 녀석이 겨우 부가적인 언어에서 어플리케이션을 만드는 하나의 언어로 순식간에
격이 올라간 언어도..ㅋㅋ 그래서 응용 프로그램에서도 가끔 스크립팅 언어로 쓰기도 하며(그렇다고 ActionScript는
아닙니다. 자바 기반이죠.) JSON이 XML보다 간단하고 가독성이 쉬운 하나의 데이터 체계를 만들어서 웹과 응용의 벽을 깨고 참
위대한 스크립트 언어로 급부상한 javascript는 언제 끝나냐구요? 웹이 사라지지 않는 이상 이녀석도 사라지지 않을겁니다.
그렇구말구요.

이글쓰느라 제가 골때립니다.ㅋ

composite / 2010년 12월 13일 / 미분류

답글 남기기

Your email address will not be published / Required fields are marked *