일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- mongodb
- react-hook-form
- var
- collapsing-margins
- border-style
- grid-column-end
- localStorage
- foreach()
- React
- javascript
- gird-row-end
- variables
- confirm()
- javascipt
- scope
- classList
- python #qqplot #qq-plot #code
- grid-template-areas
- valuable
- createElement
- relative
- prompt()
- css#cascading#display#block#inline
- grid-column-start
- package.json
- CSS
- box-shadow
- grid-row-start
- Grid
- className
- Today
- Total
data life
📖 modern javascript Deep Dive 6장 본문
데이터 타입
원시 타입
number
string
boolean
undefined
null
symbol
객체 타입
객체 함수 배열 등
원시 타입
1 . 숫자 타입
var integer = 10; // 정수
var double = 10.12; // 실수
var negative = -20; // 음의 정수
C나 JAVA의 경우, 정수와 실수를 구분하여 int
, long
, float
, double
과 같이 다양한 숫자 타입을 제공하는 반면 자바스크립트는 하나의 숫자 타입만 존재한다.
정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64bit 부동소수점 형식의 2진수로 저장되는데
자바스크립트는 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공하지 않기 때문이다.
이 값을 참조하면 모두 10진수로 해석된다.
var binary = 0b0100001; // 2진수
var octal = 0o101; // 8진수
var hex = 0x41; // 16진수
console.log(binary); // 65
console.log(octal); // 65
console.log(hex); // 65
자바스크립트는 모든 숫자 타입을 실수 처리한다.
console.log(1 === 1.0) // true
console.log(3 / 2 ) // 1.5
또한 3가지 특별한 값도 표현이 가능하다.
console.log(10 / 0); // Infinity
console.log(10 / -0); // -Infinity
console.log(11 * 'String'); // NaN
자바스크립트는 대소문자도 구별한다.
❗️NaN
표기 주의
2 . 문자열 타입
var String;
String = '문자열'; // 작은따옴표
String = "문자열"; // 큰따옴표
String = `문자열`; // 백틱(ES6)
3. 템플릿 리터럴
- 멀티라인 문자열
- 표현식 삽입
- 태그드 템플릿
var template = `Template literal`;
console.log(template); // Template literal
4. 불리언 타입
논리적 참 / 거짓
var foo = true;
console.log(foo); //true
var foo = false;
console.log(foo); //false
5. undefined 타입
자바스크립트 엔진이 변수를 초기화할 때 사용하는 값
6. null 타입
변수에 값이 없다는 것을 의도적으로 명시할 때 사용
함수가 유효한 값을 반환할 수 없을 경우에도 명시적으로 null이 사용됨
7. 심벌 타입
변경 불가능한 원시 타입의 값
다른 값과 중복되지 않는 유일무이한 값으로 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.
// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key); //symbol
//객체 생성
var obj={};
obj[key] = 'value';
console.log(obj[key]); // value
객체 타입
자바스크립트는 객체 기반의 언어이다.
데이터 타입의 필요성
1️⃣ 값을 저장하기 위해 확보해야 하는 메모리 공간의 크기를 결정하기 위해
2️⃣ 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
3️⃣ 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
동적 타이핑
자바스크립트의 모든 값은 데이터 타입을 갖는다.
변수는 데이터 타입을 갖는지 에 대해 알아보자!
정적 타입 언어는
>> 변수를 선언할 때 변수에 할당할 수 있는 값의 종류(데이터 타입)를 미리 선언해야 한다.
>> 다른 말로 명시적 타입 선언이라고도 한다.
>> 변수 타입의 변경 불가능❌ -> 변수에 선언한 타입에 맞는 값만 할당할 수 있다.
>> 컴파일 시점에 타입 체크를 수행
if 타입 체크를 통과하지 못했다면 return error로 프로그램의 실행을 막는다.
>> 따라서, 타입의 일관성을 강제하여 더욱 안정적인 코드 구현이 가능하다.
>> 대표적으로 C, C++, JAVA, Kotlin, Go, Haskell, Rust, Scala 등
typeof
연산자로 변수를 연산하면 변수에 할당된 값의 데이터 타입을 반환한다.
📍따라서 동적 타이핑이란?
>> 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 변수의 타입을 언제든지 자유롭게 변경이 가능하다.
>> 즉, 변수는 선언이 아닌 할당에 의해 타입이 결정된다. (타입 추론)
>> 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
>> 이 때문에 복잡한 프로그램에서는 변화하는 변수 값을 추적하기에 어려움이 있어서 변수 값을 확인하기 전까지는 타입을 확신할 수 없다. (유연성⬆️ 신뢰성⬇️)
>> 대표적으로 자바스크립트, 파이썬, PHP, Ruby, 리스프, 펄 등