티스토리 뷰



수 ( 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

댓글
댓글쓰기 폼