jsNote 02: 데이터 타입 let, val, const
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이 올려진 언어)가 나왔다
,
Author And Source
이 문제에 관하여(jsNote 02: 데이터 타입 let, val, const), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jieunmin/jsNote-02-데이터-타입-let-val-const저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)