본문 바로가기
JavaScript/JavaScript 발표 준비

JavaScript 질문 정리 | 6 ~ 9장

by 히욤 2021. 9. 9.

6장 데이터타입

 

  • 데이터타입이란? 타입이 필요한 이유.
더보기

데이터 타입은 값의 종류를 말한다.

데이터 타입은 원시 타입과 객체 타입으로 구별할 수 있으며, 원시 타입엔 숫자, 문자열, 불리언, undefined, null, symbol 타입이 있다.

 

동적타이핑

할당될 때 값의 타입이 결정되는 것.

심벌 테이블

컴파일러, 인터프리터는 심벌 테이블이라고 부르는 자료구조를 통해 식별자를 키로 바인딩된 값의 메모리 주소, 데이터 타입, 스코프를 관리한다.

 

  • 원시타입이란? (immutable value)
더보기

한번 생성되면 변경 불가능한 값. immutable value

숫자, 문자열, undefined, null, boolean, symbol

vs 객체타입

 

  • 자바스크립트가 정수를 처리하는 방법?
더보기

실수 부동소수점 64비트 이진수로 처리한다.

 

  • 자바스크립트에서 문자열을 표현하는 3가지 방법
더보기

작은 따옴표('' ), 큰따옴표(" "), 백틱(``)

 

  • 템플릿 리터럴과 일반 문자열을 비교해보세요
더보기

ES6부터 템플릿 리터럴이라고 하는 새로운 문자열 표기법이 도입됨.

멀티 라인 문자열, 표현식 삽입, 태그드 템플릿 등 문자열 처리 기능을 제공함.

 

  • undefined의 존재 이유 (null과 비교하여...)
더보기

undefined 타입의 값은 undefined가 유일하다.

var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화된다.

변수 선언으로 확보된 메모리 공간에는 원래 쓰레기 값이 들어있는데, 자바스크립트 엔진이 undefined로 초기화 한다.

따라서 선언만 하고 값을 할당하지 않은 변수를 참조하면 undefined가 반환된다.

var foo;// 선언 O, 할당 X 
console.log(foo);// undefined

 

이처럼 undefined는 자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값이라, 개발자가 의도적으로 변수에 할당하면 본래 취지와 어긋나고 혼란을 줄 수 있다.

변수에 값이 없다는 것을 명시하고 싶으면, undefined대신 null을 사용하면 된다.

 

  • symbol과 다른 원시 값들의 생성방식
더보기

symbol이외의 원시 값은 리터럴을 통해 생성.

하지만 심벌은 Symbol 함수를 호출해 생성.

이때 생성된 심벌 값은 외부에 노출되지 않고, 다른 값과 절대 중복되지 않는다.

 

  • 동적 타입 언어와 정적 타입 언어
더보기
  • 정적 타입 언어 static/strong type

C나 Java는 변수를 선언할 때 변수에 할당할 수 있는 데이터 타입을 사전에 선언해야한다.

이를 명시적 타입 선언 이라한다.

컴파일 시점에서 타입 체크를 수행함. 만약 타입 체크를 통과하지 못하면 에러가 발생하고, 프로그램 실행 자체를 막음.

미리 선언한 데이터 타입의 값만 할당할 수 있음.

 

  • 동적 타입 언어 dynamic type

변수를 선언할 때 데이터 타입을 선언하지 않고, var, let, const 키워드를 사용해 변수를 선언할 뿐이다.

미리 선언한 데이터 타입값 뿐 아니라, 어떤 데이터 타입의 값도 자유롭게 할당할 수 있다.

typeof 연산자

변수의 데이터 타입을 반환. 더 자세히 말하면, 변수에 할당된 값의 데이터 타입을 반환함.

자바스크립트는 변수 할당 시점에 변수 타입이 동적으로 결정되고 변수 타입을 언제든 자유롭게 변경할 수 있음.

자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다.

또한 재할당에 의해 변수 타입이 언제든 동적으로 변할 수 있다.

이를 동적 타이핑 dynamic typing 이라고 함.

정리하면 현재 변수에 할당되어 있는 값에 의해 변수의 타입이 동적으로 결정된다.

 

  • typeof 연산자란?
더보기

변수의 타입이 아니고 변수에 들어있는 값의 타입을 알려준다. null은 타입이 null인데 수정못하고 object를 반환하다.

 

  • 동적 타입 언어의 단점과 변수 사용시 주의사항
더보기

동적 타입 언어의 단점

  • 변수 값은 언제든 변경될 수 있음, 복잡한 프로그램에서 변화하는 변수 값을 추적하기 어려울 수 있다.
  • 변수의 타입이 고정되어 있지 않아서, 변수는 값의 변경에 의해 타입도 언제든 변경될 수 있다.
  • 변수는 값을 확인하기 전 까지 타입을 확신할 수 없다...
  • 개발자의 의도와 상관없이 자바스크립트 엔지에 의해 암묵적으로 타입이 자동으로 변환된다. => 신뢰성이 떨어짐...

변수 사용시 주의사항

  • 꼭 필요한 경우에 제한적으로 사용.
  • 유효 범위(스코프)를 최대한 좁게 만들기
  • 전역 변수 사용 줄이기
  • 상수 사용하기
  • 변수의 이름을 목적이나 의미를 파악할 수 있도록 네이밍

7장 연산자

 

  • 연산자란?
더보기

연산자는 하나 이상의 표현식을 대상으로 연산을 수행해 하나의 값을 만든다.

피연산자를 연산해서 값으로 만들 수 있는 것.

 

  • 피연산자란?
더보기

연산의 대상

평가될 수 있는 표현식이어야한다.

 

  • 산술 연산자
더보기

새로운 숫자 값을 만드는 연산자. // NaN은 숫자값 연산안될 때

피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다.

산술 연산이 불가능 한 경우 NaN을 반한한다.

피연산자의 개수에 따라 이항산술연산자와 단항산술연산자로 구분

 

  • 이항 산술 연산자
더보기

피연산자 2개인 산술 연산자. 부수 효과가 없다.

2개의 피연산자를 산술 연산하여 값을 만든다.

피연산자의 값이 바뀌는 경우는 없다 (부수효과)

 

  • 부수효과
더보기

피연산자의 값이 바뀌는 것

 

  • 단항 산술 연산자
더보기

부수효과 있다.

+, -는 부수효과가 없다.

 

1개의 피연산자를 산술 연산하여 값을 만든다.

증가연산자 ++ , 감소연산자 -- 는 피연산자의 값을 변경한다. 값을 변경하는 암묵적 할당이 이뤄진다.x++; // x = x+1;

+ 단항 연산자는 숫자 타입이 아닌 피연산자에 사용하면 피연산자를 숫자 타입으로 변환한 값을 생성해서 반환한다.var x = '1'; console.log(+x); //1 console.log(x); //"1"

- 단항 연산자는 피연산자의 부호를 반전한 값을 반환한다. + 단항 연산자와 마찬가지로 숫자 타입이 아닌 피연산자에 사용하면 피연산자를 숫자 타입으로 변환하여 반환한다.

 

  • 문자열 연결 연산자
더보기

하나 이상 문자열 있으면 + 있으면 문자열로 연결된다. 암묵적으로 된다.

 

  • 할당연산자
더보기

= 부수효과를 갖고 있고 우항에 있는 평가결과를 좌항에 할당한다.

우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당.

변수에 값을 할당하므로 변수 값이 변하는 부수 효과가 있다.

할당문은 값으로 평가되는 표현식인 문으로 할당된 값으로 평가된다.

 

  • 동등/일치 비교연산자
더보기

좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환함.

부수효과가 없다. 결과를 예측하기 어렵고, 실수하기 쉽다... 최대한 사용하지 말자!

  • 동등비교 (==)

좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후, 같은 값인지 비교

  • 일치 비교 (===)

좌항과 우항의 피연산자가 타입도 값고, 값도 같은 경우에 true를 반환

 

  • 대소 관계 비교 연산자
더보기

부수 효과는 없고, 피연산자의 크기를 비교해 불리언 값을 반환한다.

 

  • 다음 코드의 결과와 이유 설명하기
더보기
console.log('1' > 0); 
console.log('string'<'strings'); // true 
console.log('string'>'strings'); // false 
console.log('string' > 0); // false 
console.log(NaN > 0); // >, <, ==, === 다 false

 

더보기

NaN은 같은 값도 다르다고 반환하고, 0,-0은 다른 값인데 같다고 반환함.

이건 명확하지 않아서, 예측 가능한 정확한 비교를 하고 싶을 때 ES6에 도입된 Object.is를 사용하자

-0 === +0; //true
Object.is(-0, +0); // false

NaN === NaN; // false
Object.is(NaN, NaN); // true

 

  • 삼항조건연산자
더보기

부수 효과는 없고, 조건식의 평가 결과에 따라 반환할 값을 결정한다.

삼항 조건 연산자는 두 번째 피연산자 또는 세 번째 피연산자로 평가되는 표현식임.

// 조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값
var result = score >= 60 ? 'pass' : 'fail';

삼항 조건 연산자 표현식은 처럼 사용할 수 있지만, if...else문은 값처럼 사용할 수 없음.

삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문이다.

따라서 삼항 조건 연산자 표현식은 값처럼, 다른 표현식의 일부가 될 수 있다.

 

  • 논리연산자
더보기

우항과 좌항의 피연산자를 논리연산한다. 부수 효과는 없다

 

  • 쉼표연산자

 

  • 그룹연산자

 

  • typeof 연산자

 

  • typeof 버그

 

  • 지수연산자

 

  • 연산자 우선순위

 

  • 연산자 결합 순서

 


 

8장 제어문

  • 레이블 문에 대해 설명하시오
더보기

식별자가 붙은 문.

레이블 문을 탈출하려면 break를 사용해야 한다.

중첩된 for문 탈출할 때 유용하지만 그 밖의 경우 일반적으로 권유하지 않음.

foo: console.log('foo')

 

  • break가 가능한 문은?
더보기

레이블문, 반복문, switch문

 

  • 폴스루
더보기

case문으로 실행흐름이 이동되어 결과를 반환한 후 탈출하지 않고 default문까지 실행흐름이 이동되는 것을 폴스루라고 함

 


9장 

  • 타입변환의 종류

 

 

  • 연산자로 타입 변환하기

 

 

  • JS 엔진 if문 처리 방법

 

 

  • if문 안에서 조건식이 truty, falsy

 

 

  • 문자열 타입 변환 방법

 

 

  • 숫자 타입 변환 방법

 

 

  • 불리언 타입 변환

 

 

  • 단축평가의 원리

 

 

  • null 또는 undefined가 아닌지 확인하고 싶을 때 쓰는 연산자?

 

 

 

'JavaScript > JavaScript 발표 준비' 카테고리의 다른 글

JavaScript 질문 정리 | 1~5장  (0) 2021.09.07