티스토리 뷰
수 ( Numbers )
Javascript 에서 수는 "이중 정밀도 64비트 형식 IEEE 754 값" 으로 정의 됩니다.
0.1 + 0.2 = 0.30000000000000004
뎃셈, 뺄셈, 계수 ( 또는 나머지 ) 연산을 포함하는 표준 산술 연산자가 지원됩니다.
Math.sin(3.5);d = Math.PI * r * r;
내장 parseInt() 함수를 사용하여 문자열을 정수로 변한 할 수 있수 있습니다. 다음과 옵션으로 주어지는 변수를 지정할수 있다.
> parseInt("123", 10)123> parseInt("010", 10)10
옵션을 주지 않으면 , 다음과 같이 예상치 못한 결과를 얻는다.
> parseInt("010")8
이 같은 결과는 parseInt 함수가 0으로 시작되는 문자열을 8진수로 취급하기 때문에 발생합니다.
만약 이진수를 정수로 반환하고 싶다면, 밑을 바꾸면 됍니다.
> parseInt("11", 2)3
문자열이 수가 아닌 경우 Nan ( "Not Number" (수가 아님) 을 줄인 약자)로 불리워지는 특별한 값을 돌려줍니다.
> parseInt("hello", 10)NaN
내장 isNan() 함수를 사용하여 Nan 인지 여부를 검사 할 수 있습니다.
> isNaN(NaN)true
문자열 ( String )
Javascript에서 문자열은 문자 하나하나가 연결되어 만들어진 것입니다. 좀 더 정확히 말하자면, 각각이 16비트로 표현된
유니코드 문자들이 길게 이어져있는 것입니다. 국제하에 누구에게라도 환영받을 만한 소식
문자열 길이를 알고 싶다면, 해당 문자열의 length 속성에 접근하면 됩니다.
> "hello".length5
문자열 역시 객체로 취급된다고 엄급했던적이 있죠? 다음과 같이 메소드까지 있는 확실한 녀석입니다.
> "hello".charAt(0)h> "hello, world".replace("hello", "goodbye")goodbye, world> "hello".toUpperCase()HELLO
이외의 탑입니다.
1, false,0, 빈 문자열 (""), 수가 아님을 뜻하는 Nan, null, 와 undefined은 모두 false가 됩니다.
2. 다른 모든 값은 true
이 변환은 boolean() 함수를 써서 명시적으로 이 작업을 수행 할수 있다.
> Boolean("")false> Boolean(234)true
변수
var a;var name = "simon";
연산자
x += 5x = x + 5
+ 연산자는 문자열 이어붙이기도 합니다.
> "hello" + " world"hello world
문자열에 어떤 수 ( 또는 다른 값)를 더하면 일단 모두 문자열로 바뀌게 됩니다.
> "3" + 4 + 5345> 3 + 4 + "5"75
비교
> "dog" == "dog"true> 1 == truetrue
타입 강제 변환을 하지 않게 하려면, 삼중 등호 연산자 (===) 를 사용해야 합니다.
> 1 === truefalse> true === truetrue
제어 구조
var name = "kittens";if (name == "puppies") { name += "!";} else if (name == "kittens") { name += "!!";} else { name = "!" + name;}name == "kittens!!"
do - while
while (true) { // an infinite loop!}do { var input = get_input();} while (inputIsNotValid(input))
for (var i = 0; i < 5; i++) { // Will execute 5 times}
&& 와 || 연산자는 첫번째 식을 평가한 결과
var name = o && o.getName();
var name = otherName || "default";
var allowed = (age > 18) ? "yes" : "no";
스위치 문은 숫자나 문자열 기반으로 다중 분기되는 문자을 작성하는데 사용될 수 있습니다.
switch(action) { case 'draw': drawit(); break; case 'eat': eatit(); break; default: donothing();}
객체 ( Objects )
var obj = new Object();
와
var obj = {};
이들은 의미적으로 같습니다.
obj.name = "Simon"var name = obj.name;
그리고 ...
obj["name"] = "Simon";var name = obj["name"];
이들은 의미적으로 역시 같습니다. 두번째 방법은 속성의 이름이 실행시간(run-time)에 계산될 수 있는 문자열로 주어집니다.
obj.for = "Simon"; // 구문 오류, for 가 예약된 단어(키워드)이기 때문에obj["for"] = "Simon"; // 정상 동작
객체 엄밀 구문으로 객체의 전체적인 구조를 초기화 할 수 있습니다.
var obj = { name: "Carrot", "for": "Max", details: { color: "orange", size: 12 }}
속성에 연속적으로 접근할 수 있습니다.
> obj.details.colororange> obj["details"]["size"]12
배열 (Arrays )
배열을 생성하는 예전 방법은 다음과 같습니다.
> var a = new Array();> a[0] = "dog";> a[1] = "cat";> a[2] = "hen";> a.length3
한가지 더 편리한 배열 표현 방법은 배열 상수를 사용하는 것입니다.
> var a = ["dog", "cat", "hen"];> a.length3
배열 상수 끝에 콤마(",")를 꼬리로 남겨두는 것은 브라우저마다 다르게 처리하므로 그렇게 하지는 마시기 바랍니다.
array.length 는 배열에 들어있는 항목의 수를 반드시 반영하지는 않는다는 점을 주의하시기 바랍니다.
> var a = ["dog", "cat", "hen"];> a[100] = "fox";> a.length101
존재하지 않는 배열 인덱스를 참조하려고 하면 다음과 같이 undefined을 얻게 됩니다.
> typeof(a[90])undefined
루프를 반복할때마다 배열 length 속성을 찿아 보므로 약간 비효율적입니다.
for (var i = 0; i < a.length; i++) { // a[i] 로 뭔가를 수행}//좋은 개선책 1
for (var i = 0, len = a.length; i < len; i++) { // a[i] 로 뭔가를 수행}
// 좋은 개선책 2
for (var i = 0, item; item = a[i]; i++) { // item 으로 뭔가를 수행}
반복문 사용하는 또 다른 방법 for.... in
for (var i in a) { // a[i] 으로 뭔가를 수행}
a[a.length] = item; // a.push(item); 와 같음
배열 객체는 다음과 같은 많은 메소드를 사용할 수 잇습니다.
a.toString(), a.toLocaleString(), a.concat(item, ..), a.join(sep),a.pop(), a.push(item, ..), a.reverse(), a.shift(), a.slice(start, end),a.sort(cmpfn), a.splice(start, delcount, [item]..), a.unshift([item]..)
concat 해당 배열에 지정한 항목들을 추가한 새로운 배열을 돌려줍니다
pop 마지막 항목을 제거한 다음 돌려둡니다
push 마지막에 하나 이상의 항목을 추가합니다 (ar[ar.length]와 같이)
slice 배열의 일부분을 돌려줍니다
sort 비교에 사용할 함수를 따로 지정할 수 있습니다
splice 구역을 삭제하거나 항목을 추가해서 배열을 수정할 수 있게합니다
unshift 배열의 시작부분에 항목을 붙일 수 있습니다
함수 ( Functions )
function add(x, y) { var total = x + y; return total;}
> add()NaN // undefined에 대해 덧셈을 수행할 수 없습니다
> add(2, 3, 4)5 // 처음의 두 수가 더해집니다. 4는 무시됨
함수의 인자를 arguments로 접근 할수 있습니다.
function add() { var sum = 0; for (var i = 0, j = arguments.length; i < j; i++) { sum += arguments[i]; } return sum;}> add(2, 3, 4, 5)14
평균 구하기
function avg() { var sum = 0; for (var i = 0, j = arguments.length; i < j; i++) { sum += arguments[i]; } return sum / arguments.length;}> avg(2, 3, 4, 5)3.5
javascript 함수 객체라면 모두 가지게 되는 apply() 메소드를 사용하여 임의의 매개 변수를 넘겨줄 수 있습니다.
> avg.apply(null, [2, 3, 4, 5])3.5
Javascritp 는 익명의 함수를 만들 수 있도록 허용 합니다.
var avg = function() { var sum = 0; for (var i = 0, j = arguments.length; i < j; i++) { sum += arguments[i]; } return sum / arguments.length;}
이것은 의미적으로 function avg() 형식과 같습니다.
문장의 어느 곳에나 일반적인 방식으로 완전한 함수 정의를 넣을 수 있도록 허용하는 것이기 때문에 매우 강력합니다.
이는 다양한 요령을 부릴 수 있게합니다. 다음 예는 C 의 블록 유효 범위를 적용 시킨 것 처럼 지역 변수를 "숨기는" 요령을 보여줍니다:
> var a = 1;> var b = 2;> (function() { var b = 3; a += b;})();> a4> b2
'웹개발 > Javascript' 카테고리의 다른 글
오브 젝트를 생성하는 5가지 방법 (0) | 2011.01.08 |
---|---|
Javascript Switch문을 바꿔서 표현 (0) | 2011.01.08 |
자바스크립트 정규 표현식 (0) | 2010.12.23 |
자바스크립트 시간 계산 샘플 (1) | 2010.12.20 |
Understanding JavaScript Prototypes. (0) | 2010.12.14 |
댓글