ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바스크립트 표현식, 데이터타입, 정적동적타입언어, 삼항조건연산자
    Javascript/모던자바스크립트 Deep Dive 2022. 12. 19. 17:28

    p.50

    값과 표현식 그리고 문

    값 은 표현식이 평가되어 생성된 결과를 말한다.

    표현식 은 값으로 평가될 수 있는 문이다. (즉 표현식이 평가되면 새로운 값을 생성하거나 기존값을 참조한다.)

     

    문 은 프로그램을 구성하는 기본 단위이자 최소 실행 단위다.

    문은 여러 토큰으로 구성되어 있으며 토큰이란 문법적인 의미를 가지며 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다. ex) 키워드 식별자 연산자 리터럴 세미콜론 마침표 등

    var x; //변수선언문은 값으로 평가될 수 없으므로 표현식이 아니다
    
    x = 1+2; //표현식이면서 완전한 문이기도 하다

    p.59

    데이터타입

    구분 데이터타입 설명
    원시타입 숫자 (number) 타입 숫자, 정수와 실수 구분 없이 하나의 숫자타입만 존재
    문자 (string) 타입 문자열
    불리언 (boolean) 타입 논리적 참(true)과 거짓(false)
    undefined 타입 var 키워드로 선언된 변수에 암묵적으로 할당되는 값
    null 타입 값이 없다는 것을 의도적으로 명시할 때 사용하는 값
    심벌(symbol) 타입 ES6에서 추가된 7번째 타입
    객체타입 객체 함수 배열 등

    숫자 타입 1과 문자 타입 "1"은 전혀 다른값이다.

     

    1. 숫자타입

    c나 자바의 경우 정수와 실수를 구분하여 int, long, float, double 등과 같은 다양한 숫자 타입을 제공하지만

    자바스크립트는 숫자 타입 모두 실수로 처리된다.

    console.log(1 === 1.0); // true

     

    2. 문자열타입

    ES6부터 템플릿 리터럴이라고 하는 새로운 문자열 표기법 도입  => 백틱(``)

     

    1. 백틱내에서는 줄바꿈(개행)이 혀용된다.

    2. 표현식 삽입이 가능하다 ${ } (문자열이 아니더라도 문자열타입으로 강제 변환되어 삽입된다)

    // 백틱`` 내에서 개행 가능
    var str = `hello
    world.
    `;
    
    // ${ } 을 통해 표현식 삽입가능 (문자열 타입으로 강제 변환 삽입)
    var first = "woony"
    var last = "Jeong"
    
    console.log(`My name is ${first} ${last}.` // My name is woony Jeong.

    3. 불리언타입

    참과 거짓(true와 false) 을 나타내는 타입 => 조건문에서 자주사용

    false 는 0 

    true 는 1로 표현

     

    관습적으로 0 혹은 false의 값이 아니라면 true타입이 된다 (숫자, 문자열)

    문자열중 ''(공백도 없는) 빈문자열은 false가 나타난다

     

    4. undefined , null 타입

    두 타입 모두 각각의 값이 유일하며

    undefined 는 변수 선언에 의해 확보된 메모리의 공간을 초기화한 값이다.

    null 은 변수에 값이 없다는 것을 말한다.

     

    5. 심벌타입

    ES6에 추가된 7번째 타입으로 변경 불가능한 원시타입의 값이다.

    심벌 값은 다른 값과 중복되지 않는 유일무이한 값이다.

    (주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.)

     

    var key = Symbol('key');
    console.log(typeof key); //symbol
    
    var obj = {};
    
    obj[key] = "value";
    console.log(obj[key]); //value

     데이터 타입의 필요성  = 메모리 공간의 확보와 참조, 2진수 해석결정 

    var score = 100 ;

     

    메모리확보시

    1. 100이라는 값을 숫자 타입으로 해석하고 8바이트 메모리 공간을 확보한다

    2. 해당 메모리에 100을 2진수로 저장한다.

     

    메모리참조시

    1. score 이라는 변수를 참조할 때 숫자타입이라고 인식한다.

    2. 숫자타입은 8바이트 단위로 저장되기 때문에 8바이트 단위로 저장된 값을 읽어 들인다.

     

    더불어 메모리에서 읽어들인 2진수를 어떻게 해석할지 결정하기 위해 데이터 타입이 필요하다.

     

     

    p.70

    정적타입언어 와 동적타입언어

    정적타입언어 : 변수 선언시 이미 타입이 정해져 있으며 해당 데이터타입과 맞지 않는 값이 할당되면 에러 발생

    //c에서 변수선언 예시
    char c; // c변수에는 1바이트의 정수 타입의 값만 할당가능
    int num; // num변수에는 4바이트 정수 타입의 값만 할당가능

    동적타입언어 : 변수선언 시점이 아닌 할당에 의해 타입이 결정(타입추론), 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. => 동적타이핑

    //javascript 는 동적타입언어
    var foo
    
    foo = 3; //number
    foo = 'hello'; //string
    foo = true; // boolean
    foo = null; //object
    foo = Symbol(); //symbol

    동적타입언어에서는 유연성 대신 신뢰성을 잃기 높다는 단점으로 인해

    변수의 선언은 최소한으로 하며

    전역변수는 최대한 지양하며

    스코프를 좁게하며

    최대한 상수를 사용하며(const)

    변수이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍한다.

     

    p.84

    삼항조건연산자

    조건식 ?  조건식이 true일때 반환하는 값 : 조건식이 false일때 반환하는 값

    //삼항연산자 사용법
    var x = 10;
    var result = x % 2 ? "홀수" : "짝수"
    console.log(result) // 짝수
    
    //if 문은 표현식이 아닌 문이다. 따라서 if...else문은 값처럼 사용할 수 없다.
    var x = 10;
    var result = if(x%2){result = "홀수"}else{result = "짝수"}
    //SyntaxError: Unexpected token if

    p.89

    지수연산자  **

    2 ** 2; // -> 4
    2 ** 2.5; // -> 5.656854249...
    2 ** 0; // -> 1
    2 ** -2; // -> 0.25

    댓글

Designed by Tistory.