jsNote 02: 데이터 타입 let, val, const

26446 단어 jsNotejsNote

1. variable (변수)

let name = 'emma';
console.log(name); //emma 
name = 'hello';
console.log(name); //hello

let(ES6에 추가된 기능)으로 변수 선언 시 변수에 다시 값을 할당 할 수 있다.
✔ 어플리케이션을 실행하면 어플리케이션마다 쓸 수 있는 메모리가 할닫되는데, 이 메모리는 텅텅 비어져 있고 박스 하나에 name이라는 값을 저장하게 된다.

2. blockscope

{
    let name2='emma';
}
console.log(name2); //error

✔ 코드를 블락 안에 작성하면 블락 밖에서 변수에 접근할 수 없다.

let globeName = 'emma';
console.log(globeName); //emma

✔ 블락 밖에서 선언하면 어느 곳에서나 접근 가능하기 때문에 어플리케이션이 실행되는 순간부터 끝날 때까지 메모리에 탑재되어 있다. 그래서 최소한으로 쓰는 편이 좋다.

console.log(age); //undefined
age = 4;
console.log(age); //4
var age;

val 변수는 호이스팅 기능 때문에 값을 선언하기 전에도 출력이 가능하다.
✔ let에서는 적용 불가능
✔ hoisting(move declaration from bottom to top)은 어디에 선언했느냐에 상관없이 값을 끌어올려 주는 기능이다.

{
    age = 4;
    var age;
}
console.log(age); //4

✔ val은 블락 안에서 선언해도 밖에서 출력 가능하므로 필요할 때만 쓰도록 한다.

3. const

const daysInWeek = 7;

✔ constant(immutable date type)는 한 번 값이 할당된 이후로는 값을 바꿀 수 없다.
✔ const를 쓰는 이유는 security(보안상의 이유), thread safety(어플리케이션 실행시 다양한 thread들이 동시에 변수에 접근 가능하므로 위험성이 올라감), reduce human mistakes(인간의 실수 감소)가 있다.

4. variable types

✔ primitive type

  • 더이상 나눠질 수 없는 한 가지 아이템
  • number, string, boolean, null, undefined, symbol
  • value가 바로 메모리에 저장된다.
//number

const count = 17; //정수
const size = 17.1; //소수

console.log(`value: ${count}, type: ${typeof count}`); //value: 17, type: number
console.log(`value: ${size}, type: ${typeof size}`); //value: 17.1, type: number

const infinity = 1/0; //숫자를 0으로 나누면 무한대의 숫자 출력
const negativeInfinity = -1/0; 
const nAn = 'not a number'/2; //숫자가 아닌 string을 숫자로 나누기

console.log(infinity); //infinity
console.log(negativeInfinity); //-infinity
console.log(nAn); //NaN

const bigInt = 123287497593473342342534534594375n;
console.log(`value: ${bigInt}, type: ${typeof bigInt}`); //value: 12328749~ type: bigInt

//js에서 number는 -2의 53승에서 2의 53승 정도 까지의 숫자가 표현 가능하나 최근에 bigInt라는 타입이 추가되었다.
//숫자의 마지막에 n이라고 추가하면 bigInt라고 간주된다.
//크롬과 파이어폭스에서만 가능하다.
//String

const char = 'c';
const brendan = 'brendan';
const greeting = 'hello' + brendan;
console.log(`value: ${greeting}, type: ${typeof greeting}`); //value: hellobrendan, type: string

const helloBob = `hi ${brendan}!`; //template literals(${})는 string
console.log(`value: ${helloBob}, type: ${typeof helloBob}`); //value: hi brendan!, type: string
//boolean 참과 거짓
//false: 0, null, undefined, NaN, ''
//true: any other value

const canRead = true;
const test = 3<1; //false
console.log(`value: ${canRead}, type: ${typeof canRead}`); //value: true, type: boolean
console.log(`value: ${test}, type: ${typeof test}`); //value: false, type: boolean
//null 비어있는 값

let nothing = null;
console.log(`value: ${nothing}. type: ${typeof nothing}`); //value: null, type: object
//undefined 값이 있는지 비어있는지도 정해져 있지 않는 상태

let x;
console.log(`value: ${x}. type: ${typeof x}`); //value: undefined , type: undefined
//symbol 고유한 식별자가 필요하거나 동시다발적인 코드에서 우선순위를 주고 싶을 때 이용한다

const symbol1 = Symbol('id');
const symbol2 = Symbol('id');
console.log(symbol1 === symbol2); //동일한 string을 작성했어도 다르기 때문에 false를 출력한다.

const gSymbol1 = Symbol.for('id');
const gSymbol2 = Symbol.for('id');
console.log(gSymbol1 === gSymbol2); //true : 동일한 심볼을 만들고 싶다면 .for 쓰기
console.log(`value: ${symbol2.description}, type: ${typeof symbol2}`) //.description 써서 스트링으로 만들어주기

✔ object type

  • 아이템을 한 단위로 묶어 놓은 것
  • box, container
  • reference(주소)를 가르키는 것이 메모리에 저장된다.
//object
const ellie = {name: 'ellie', age: '20'};
console.log(ellie.name);

5. dynamic typing

//Dynamic typing(dynamically typed date)

let text = 'hello';
console.log(text.charAt(0)); //h
console.log(`value: ${text}, type: ${typeof text}`); //hello, string
text = 1;
console.log(`value: ${text}, type: ${typeof text}`); //1, number
text = '7'+5;
console.log(`value: ${text}, type: ${typeof text}`); //75, string
text = '8' / '2';
console.log(`value: ${text}, type: ${typeof text}`); //4, number

//여기서 text.charAt(0)을 출력하면 오류가 나서 typescript(js에 type이 올려진 언어)가 나왔다


,

좋은 웹페이지 즐겨찾기