JavaScript

[6장, 7장] 데이터타입, 연산자

잼굴 2022. 2. 15. 17:14

공부해라잉

 

자바 스크립트에는 7개의 데이터 타입이 있다. 이 데이터 타입은 원시 타입과 객체 타입으로 나뉜다.

 

원시 타입 : 1. 숫자 타입 2. 문자열 타입 3. 불리언 타입 4. undefined타입 5. null타입 6. 심벌 타입

객체 타입 : 객체 함수 배열 등

 

1. 숫자 타입 

 

모든 숫자를 실수로 처리한다. 1 === 1.0 

Infinity , -Infinity , NaN의 특별한 값도 표현 가능하다.

 

2. 문자열 타입

 

전 세계 대부분의 문자를 표현할 수 있다. 

문자열은 작은따옴표 ('') , (" "), (` `)으로 텍스트를 감싼다.

 

2-1 템플릿 리터럴

 

템플릿 리터럴은 멀티라인 문자열, 표현식 삽입, 태그도 템플릿 등 편리한 문자열 처리 기능을 제공한다.

백 틱 (` `)을 사용해 표현한다.

 

2-1-1 멀티라인 문자열

일반 문자열 내에서는 줄 바꿈이 안된다.  \n , \t , \r 등을 통해서 문자열 처리를 해야 하는데

템플릿 리터럴 내에서는

var template = `<ul>

    <li><a href="#"> Home </a></li>

</ul>';

하면 그냥 백틱내에 있는 내용 그대로 다 나온다.

 

 

2-1-2 표현식 삽입

문자열 연산자 +를 사용해서 연결할 수 있다.

var first = "do";

var last = "jam";

console.log('My name is ' + first + ' ' +last + '.');  // My name is do jam.

 

표현식을 삽입하려면 ${ }으로 표현식을 감싼다. 이러면 표현식이 문자가 아니라도 문자열 로타 입이 강제로 바뀜

표현식 삽입은 반드시 템플릿 리터럴 내에서 사용해야 한다. 일반 문자열에서 표현식 삽입은 그냥 문자열로 취급된다.

 

3. 불리언 타입

 

값을 논리적 참, 거짓을 나타내는 true, false뿐이다.

 

4. undefined 타입

undefined 타입의 값은 undefined 뿐이다.

변수에 값이 없다고 undefined로 값을 주면 혼란됨. 이럴 땐 null로 할당하자.

 

5. null 타입

null 타입의 값은 null 뿐이다. 대소문자 구분하기 때문에 무. 적. 권 null로 써야 한다.

변수에 값이 없다는 걸 의도적으로 명시하고자 할 때 사용한다.

 

6. 심벌 타입

 

변경 불가능한 원시 타입. 다른 값과 중복되지 않는 유일한 값.

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

var key = Symbol('key');

console.log(typeof key); // symbol

 

7. 객체 타입

자바스크립트는 객체 기반의 언어이다. 거의 모든 것이 객체다.

 

 

왜 데이터 타입이 필요한가?

 

자바스크립트는 값의 종류에 따라 정해진 크기의 메모리 공간을 확보한다.

예를 들어 숫자는 8바이트의 메모리 공간을 확보해야 한다.

따라서 숫자 값 100을 저장하기 위해 8바이트의 메모리 공간을 확보한 뒤 메모리에 100을 2진수로 저장한다.

 

 

동적 타이핑

 

자바스크립트는 데이터 타입을 사전에 선언해야 하는 정적 타입이 아니다.

할당에 의해 타입이 "결정"된다. 따라서 재할당에 의해 언제든지 동적으로 변환될 수 있다.

그래서 동적 타입 언어이다.

 

그래서 변수를 사용할 때 

1. 변수는 꼭 필요한 경우에 한해 제한적으로 사용하기.

2. 변수의 유효 범위(스코프)는 최대한 좁게 만들기

3. 전역 변수는 최대한 사용하지 않기.

4. 변수보다는 상수를 사용하기.

5. 변수 이름은 의미를 파악할 수 있도록 네이밍 하기

 


 

 

7장 연산자

 

연산자는 하나이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입 지수 연산 등을 수행하는 하나의 값을 만든다.

 

1. 산술 연산자

 

피연산자를 대상으로 수학적 계산을 해서 새로운 숫자 값을 만든다. 산술 연산이 불가능한 경우, NaN을 반환한다.

 

이항 산술 연산자

+ , -, *, /, %

 

요건 알지~

 

2. 단항 산술 연산자

 

++ (증가) , 

-- (감소),

+ (아무 효과 x),

- (양수를 음수로, 음수를 양수로 반전)

 

 

var x = 5, result;

 

result = x++;

console.log(result, x);  // 5 6

 

result = ++x;

console.log(result, x); // 7 7

 

result = x--;

console.log(result, x); // 7 6

 

result = --x;

console.log(result, x);  // 5 5

 

-> 정처기 준비할 때 뭔 말인지 헤맨 부분ㅋㅋ;

 

숫자 타입이 아닌 피연산자에 + 단항 연산자를 사용하면, 피연산자를 숫자 타입으로 변환하여 반환한다.

- 단항 연산자는 피연산자의 부호를 반전한 값을 반환한다.

-'10';  // -10

-true; // -1  (불리언 값도 숫자로)

-'Hello'; // NaN (문자열은 안되니까 NaN)

 

 

3. 할당 연산자

 

= , += , -= , *= , /= , %=

 

이건 알고잉~~

 

4. 비교 연산자

 

== (동등)  === (일치 비교:타입이 같음)

!=  (값이 다름)

!==(타입이 다름)

 

동등 비교 (==) 연산자는 타입이 다르더라도 암묵적 타입 변환 후 같은 값일 수도 있으면 true로 반환함

 

5 == '5'  // true

 

일치 비교 ( === )는 값도 갚고 타입도 같을 때만 true를 반환한다.

5 === 5 // true

5 === '5' // false

 

NaN은 유일하게 자신과 일치하지 않음. 숫자가 NaN인지 조사하려면 Number.isNaN을 사용해야 한다.

 

양의 0과 음의 0을 비교하면 true

 

하지만 Object.is라는 정확한 비교를 하는 걸로 하면 

 

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

Object.is(Nan, NaN); // true

 

 

5. 대소 관계 비교 연산자

 

> , < , >= , <=  

 

이건 알고잉~ 불리언 값을 반환한다.

 

 

6. 삼항 조건 연산자

 

조건식? 조건식이 true일 때 반환할 값 : false일 때 반환할 값

 

(score >= 60) === false

var result = score >= 60 ? 'pass' : 'fail";

 

 

? 앞의 첫 번째 피연산자는 조건식 :

불리언 타입의 값으로 평가될 표현식. 만약 평가결과가 불리언이 아니면 암묵적 타입 변환.

 

if.... else 문을 사용해도 삼항 조건 연산자 표혀닉과 유사하게 처리 가능하다.

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

if...else 문은 표현식이 아닌 문이다.

반대로 삼항 조건 연산자 표현식은 표현식인 문이다.

 

 

 

7. 논리 연산자

 

|| 논리합(OR)

&& 논리곱(AND)

!  부정(NOT)

 

부정(!) 연산자는 언제나 불리언 값을 반환한다. 불리언 값이 아니면 암묵적 타입 변환

!0; -> true

!'Hello'; -> false

 

논리합 또는 논리곱의 결과는 불리언 아닐수도있다. 

 

 

8. 쉼표 연산자

 

왼쪽부터 차례차례 피연산자를 평가한다. 평가가 끝나면 마지막 피연산자의 평가결과를 반환한다.

var x, y, z;

 

x=1, y=2 , z=3; // 3

 

 

9. 그룹 연산자

그냥 말 그대로 괄호 속에 있는 게 우선순위

 

 

10. typeof 연산자

 

string, number, boolean, undefined, symbol, object, function 중 하나를 반환함

null은 버그 때문에 반환x

 

그래서 null인지 확인하고 싶을 때는 일치 연산자 (===)를 사용해야 한다.

 

선언하지 않은 식별자를 typeof 연산자로 연산하면 ReferenceError 가아닌 undefined를 반환한다.

 

11. 지수 연산자

 

**를통해 제곱함

음수는 괄호로 묶어야 한다

(-5) * 2; // 25

 

지수 연산자는 이항 연산자 중에 우선순위가 가장 높다.

 

연산자 우선순위가 따로 있다 

귀찮쓰 ㅋ

 

 

 

 

'JavaScript' 카테고리의 다른 글

[13장, 14장] 스코프 , 전역변수의 문제점  (0) 2022.02.25
[12장] 함수  (2) 2022.02.24
[10장] 객체 리터럴  (0) 2022.02.17
[8장, 9장] 제어문 , 타입변환과 단축평가  (0) 2022.02.17
[4장,5장]변수 , 표현식과 문  (0) 2022.02.15