JavaScript

모던자바스크립트 - 6(데이터 타입), 7(연산자), 8(제어문)

milliwonkim 2023. 3. 7. 18:00
반응형
SMALL

데이터 타입

구분 데이터 타입 예시
원시 타입(Primitive Type) number - 10, 10.12, -20
- Infinity, -Infinity, NaN
- 0b100001(2진수), 0o101(8진수)

- 1 === 1.0 (숫자타입은 모두 실수로 처리)
- 0o101 === 1 ("")
string - 'String\n Number'(이스케이프 시퀀스 없이는 줄바꿈 불가)
- `Template Literal
Number` (이스케이프 없이 줄바꿈 등 허용)
- `variable value is ${variables}` (Template Literal은 변수를 넣어서 사용 가능)
boolean - true, false
null - null
- 변수에 값이 없음을 의도적으로 명시
- undefined와는 다름
undefined - undefined
- 선언하면 암묵적으로 undefined로 초기화됨
symbol - 변경 불가능한, 다른값과 중복안되는 원시타입
- Symbol 함수를 호출해서 심벌타입 값을 생성(나머지 원시타입들은 리터럴로 생성)
객체 타입(Object Type) 원시타입 이외의 데이터값

 

동적 타이핑

- 정적타입언어: 변수 선언 시 변수타입을 정해야함 ex) JAVA, C, C++

- 동적타입언어: 변수 선언 시 변수타입 선언 안함 => 할당이 타입을 결정 => 할당된 데이터 값 === 변수 타입 ex) JavaScript, Python...

let variables;
console.log(typeof variables) // undefined

variables = 3;
console.log(typeof variables) // number

variables = 'Hello'
console.log(typeof variables) // string

 

연산자

구분 종류  
산술연산자 이항 산술 연산자 +, -, *, /, % (SideEffect X)
  단항 산술 연산자 - ++, -- (사이드이펙트: 값을 증가 혹은 감소로 바꿈)
- +, -(양수를 음수로 전환) (사이드 이펙트 없음)

사이드이펙트: 피연산자의 값을 변경하는 암묵적 할당
- ++, -- 피연산자 값을 변경
ex) x-- => x = x - 1
ex) -x => -x (피연산자 값을 변경 안함 => 사이드 이펙트 없음)
  문자열 연결 연산자 +
ex) 1 + '2' = '12'
  할당 연산자 +, +=, -=, *=, /=, %=
사이드 이펙트 있음
ex)
x += 5 => x = x + 5
x -= 5 => x = x - 5
  비교 연산자 - == => x와 y의 값만 같음
- === => x와 y의 값, 타입 모두 같은
- != => x와 y의 값만 다름
- !== => x와 y의 값, 타입 모두 다름

사이드 이펙트 없음

- NaN === NaN // false
=> NaN은 자신과 일치하지 않는 유일한 값
  논리연산자 - || => 논리합(OR)
- && => 논리곱(AND)
- ! => 부정(NOT)

사이드 이펙트 없음
  쉼표 연산자 let x, y, z;
x = 1, y = 2, z =  3

// 결과 3

왼쪽부터 피연산자 차례로 평가,마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과 반환
  그룹 연산자 () 소괄호로 묶는다 => 우선순위 조절

10 * (2 + 3) = 50
10 * 2 + 3 = 23
  typeof 연산자 typeof '문자열' => 'string'
typeof 3 => 'number'
  지수 연산자 거듭제곱을 의미

2 ** 2 = 4
2 ** 3 = 8
...
  그외 연산자 - ?. => 옵셔널 체이닝
- ?? => null 병합 연산자
- delete => 프로퍼티 삭제
- new => 생성자 ㅏㅁ수를 호출할 때 사용해 인스턴스 생성
- instanceof => 좌변 객체가 우변의 생성자 함수와 연결된 인스턴스인지 판별
- in => 프로퍼티 존재 확인

부수효과 있는 연산자

- = => 변수값이 변하는 부수효과

- ++, -- => 피연산자의 값을 변경하는 부수효과

- delete => 객체 프로퍼티를 삭제하는 부수효과

 

연산자 우선순위

 

제어문

// 블록문
{
	let foo = 10;
}

// 제어문
if(조건식) {

} else if {

} else {

}

// 혹은

switch(표현식) {
    case 표현식1:
        logic()
        break;
    case 표현식2:
        logic2()
        break;
    default:
        logic3()
        // default는 break문 생략이 일반
}

// 함수 선언문
function sum(a, b) {
	return a + b
}

// 반복문
for(let i = 0; i < N; i++) {
    logic()
}

// 조건이 한 번도 안맞는다면 한 번도 실행안됨
while(x === true) {
    logic()
     
    if(x === false) break; // 반복문 종료
    if(x !== false) continue; // 반복문 계속
}

// 먼저 로직 실행 => while의 조건이 true라면 false가 될때까지 실행
// 무조건 한번이상 실행됨
do {
   logic()
} while(x === true)

 

-------

 

기타

 

JavaScript에서 typeof 연산자는 값 또는 표현식의 유형을 나타내는 문자열을 반환합니다.

typeof에 전달된 피연산자가 선언되지 않은 변수나 식별자인 경우 오류를 반환하지 않고 대신 "undefined"라는 문자열을 반환합니다.

 

이는 JavaScript에서 변수를 var, let, 또는 const 키워드로 선언할 수 있지만 사용하기 전에 선언하지 않아도 된다는 것 때문입니다. 선언되지 않은 변수가 표현식에서 사용될 때, 전역 범위에서 암묵적으로 선언되며 초기 값으로 undefined가 설정됩니다.

 

따라서 typeof 연산자를 사용하여 선언되지 않은 변수를 사용하면, 변수가 전역 범위에서 암묵적으로 선언되고 초기 값이 undefined로 설정되기 때문에 "undefined"를 반환합니다.

 

반응형
LIST