본문 바로가기

Development /JavaScript

[자바스크립트 완벽 가이드 정리] 타입, 값 , 변수

타입, , 변수

 

프로그래밍 언어의 가장 기본적인 특징은 언어가 지원하는 데이터 타입의 종류

프로그램은 값의 유지가 필요할 변수에 값을 할당

변수는 값에 대한 이름을 정의하고, 값을 이름으로 참조

이러한 작동방식은 일반적 프로그램 언어가 갖는 특징 하나

 

자바스크립트는 숫자, 문자열, 불리언, null, undefined, 객체라는 값을 가짐

객체 : 이름과 값을 갖는 프로퍼티의 집합

 

인터프리터 : 메모리관리를 위해 객체가 다시 사용되지 않을 거라 판단하고 자동으로 메모리에서 해제

 

자바스크립트의 타입은 원시타입과 객체 타입으로 나뉠 있음

메서드를 가진 타입과 그렇지 않은 타입으로 나뉠 있음

수정 가능한 타입과 수정 없는 타입으로 나뉠 있음

* [그림 추가 필요]

 

자바스크립트는 타입의 변환이 자유로움 ( 자바스크립트 특징 하나 )

자바스크립트 변수들은 타입이 정해져 있지 않음

(변수에 어떤 타입의 값도 할당할 있고, 같은 변수에 다른 타입의 값을 할당할 있음)

 

1. 숫자

정수 값과 실수 값을 구분하지 않음 (자바스크립트의 특징 하나)

모든 숫자를 실수로 표현 (IEE 754 표준에서 정의한 64비트 실수)

*리터럴 : 컴파일시 프로그램내에 정의되어 있는 그대로 정확히 해석되어야

 

1.1 정수 리터럴

10진수 정수

 숫자 시퀀스 형태로 작성된다

16진수 정수

 '0x' or '0X' (0 숫자) 앞에 붙음

8진수 정수

 '0' ('0' 숫자) 앞에 붙음 (Strict Mode 에서는 금지)

 

1.2 부동소수점 리터럴

소수점을 가질 있고, 지수 표기법으로 표현할 있다

지수표기법 문법

[ digits ] [ .digits ] [ ( E | e ) [ ( + | - ) ] digits ]

실수에 이어 E | e 뒤에 + | - 나오고 정수 지수 값이 나온다

실수에 10 지수횟수만큼 곱한

 

1.3 산술 연산

기본 기호들은 일반적 프로그램 언어들과 같음 ( + - * / % )

복잡한 수치연산을 위해  Math 객체를 통해 지원

산술 연산은 오버플로우, 언더플로우, 0으로 나누는 에러를 발생 시키지 않음

오버플로우

Infinity , -Infinity

언더플로우

0 , -0

0으로 나누는 연산

오버플로우와 같음 , 0 0으로 나누면 NaN 출력

 

NaN 독특한 기능 : 비교를 없다 (x == NaN 사용 없음)

x != NaN 이런 방식의 표현식을 사용

 

1.4 이진 부동소수점과 반올림 오류

실수 연산을 근사 값으로 표현

IEEE-754 부동소수점 표현방식은 0.1같은 값을 정확하게 표현 없다.

(현대적 프로그래밍 언어들의 문제)

민감한 금융 계산에는 환산된 정수 값을 이용 해야

(ex $(달러) 대신 정수 값인 센트로 단위변경)

 

1.5 날짜와 시간

Date() 생성자를 제공하며 Data 객체는 메서드를 가지고 있다

Date 객체는 원시타입이 아님

 

2. 텍스트

16비트 값들이 연속적으로 나열된

수정할 없는 유니코드 문자로 표현

0기반의 인덱싱을 사용( 다른 프로그램과 동일 )

문자 하나를 하나의 타입으로 제공하지 않음

(길이가 1 문자열을 사용해야 한다 char 같은 것은 없음)

 

2.1 문자열 리터럴

작은따옴표 또는 큰따옴표로 둘러싸면 된다.

ECMAScript3

문자열 리터럴은 줄로 작성

ECMAScript5

\ 이용해 여러 줄로 작성가능

 

2.2 문자열 리터럴의 이스케이프 문자열

\ 이용한 이스케이프 시퀸스를 사용

시퀸스

표현하는 문자

\0

문자 (\u0000)

\b

역스페이스 (\u0008)

\t

수평 (\u0009)

\n

줄바꿈 문자 (\u000A)

\v

수직 (\u000B)

\f

피드(\u000C)

\r

캐리지 리턴 (\u000D)

\"

따옴표 (\u0022)

\'

작은 따옴표 (\u0027)

\\

역슬래시 (\u005C)

\x

개의 16진수 숫자 XX 의해 지점되는 Latin-1 문자

\u

개의 16진수 숫자 XXXX 의해 지정되는 유니코드 문자

 

2.3 문자열 다루기

여러 문자열을 '+' 이용하여 붙일 있음

길이는 length 프로퍼티를 사용해 있음

( 외의 문자열을 다루는 다양한 메서드가 있음, 레퍼런스 참조)

자바스크립트에서 문자열은 변경되지 않음

(replace() toUpperCase() 같은 메서드는 문자열을 반환함)

 

2.4 패턴매칭

문자 패턴을 나타내는 객체를 생성하기 위해 RegExp() 생성자를 정의

RegExp 원시타입이 아님

(레퍼런스 참조)

 

3 불리언

true, false 하나의 값을 가짐

비교의 결과로 생성

AND 연산

&&

OR 연산

||

NOT 연산

!

 

4 null undefined

null '객체가 아님' 뜻하는 특수한 객체

 

undefined '값이 없음' 나타내는

자체가 없음

초기화되어 있지 않거나, 존재하지 않는 값에 접근하려 얻는 변수의

 

시스템레벨에선 undefined, 일반적 프로그램레벨에선 null 사용

 

5. 전역 객체

매우 중요한 용도로 사용되는 일반적 자바스크립트 객체

(레퍼런스 'Global' 부분 참조)

최상위 코드에선 this 이용해 참조

 

6. 레퍼 객체

문자열, 숫자, 불리언의 프로퍼티에 접근하려고 생성되는 임시객체

문자열, 숫자, 불리언 값의 프로퍼티는 읽기전용

레퍼 객체를 필요에 따라 기본 타입으로 변환환다

==

값과 레퍼 객체를 동등하게 비교

===

값과 레퍼 객체를 구별

typeof 연산자를 이용해 기본타입과 레퍼 객체의 차이점을 있음

 

7. 원시 타입과 참조 타입

원시타입

불리언, 숫자, 문자열, null, undefined

참조타입

배열, 함수    객체

원시 타입은 수정이 불가

문자열을 수정하는 모든 메서드는 새로운 문자열을 반환한다

 

원시타입

값으로 비교

문자열

문자열의 길이, 인덱스의 문자들을 비교

객체

참조로 비교, 둘의 프로퍼티 or 원소를 비교

 

8. 타입 변환

어떤 타입의 값이든 전달할 있고, 자바스크립트는 값을 필요에 따라 변환

 

8.1 변환과 동등비교

값의 타입을 유연하게 변환 시킬 있음

== 연산자를 이용 하면

 

8.2 명시적 변환

때때로 명시적 변환이 필요하고 코드를 깔끔하게 유지하기 위해 사용

가장 손쉬운 방법은 Boolean(), Number(), String(), Object() 함수사용

null, undefined 제외한 값은 toString() 메서드로 변환

'+' , '!' 들이 암시적 타입변환을 수행

Number 클래스의 toString() 메서드는 기수를 정하는 선택적 인자를 받음

정의하지 않음

10진수

2

2진수

8

"0" + 8진수

16

"0x" + 16진수

 

숫자를 문자열로 변환하는 가지 메서드

(결과 문자열 내의 나머지 숫자들을 적절히 반올림 )

toFixed()

소수점 이후에 정의된 수와 문자열로 숫자를 변환, 지수표기법 사용 X

toExponential()

소수점 앞에 숫자 하나와 소수점 뒤에 지정된 만큼의 자릿수를 놓는 방식으로 숫자를 문자열로 변환, 지수표기법 사용 O

toPrecision()

유효 자릿수가 숫자의 전체 정수부분을 표시할 정도로 크지 않다면

지수 표기법 사용 O

parseInt(), parseFloat() 함수는 리터럴의 일부가 숫자가 아니어도 (Number() 보다 유연)

 

8.3 객체에서 원시 타입으로 변환

toString()

많은 클래스들이 메서드를 사용해 객체를 좀더 자세히 정의하고 있음

valueOf()

원시타입을 반환하지 않고 단순히 객체 자체를 반환

 

9. 변수 선언

자바스크립트 변수 선언에는 타입을 명시하지 않음

변수는 var 키워드를 이용하여 선언

여러 개의 변수를 한꺼번에 선언가능 , 선언과 동시에 초기화 가능

(초기화 하지 않으면 변수의 값은 undefined)

 

9.1 반복하고 생략 가능한 변수 선언

변수를 반복적으로 선언 가능

표준모드에서 var선언 없이 변수에 값을 배정하면 동작한다

(나쁜 습관이다 항상 변수 var 선언하자)

 

10. 변수의 유효범위

프로그램에서 어떤 변수가 정의되어 있는 영역

전역 유효범위에서는 var 구문을 사용하지 않고 전역 변수를 선언할 있다

지역변수를 선언하려면 반드시 var 사용해야 한다

 

10.1 함수의 유효범위와 끌어올림(Hoisting)

프로그래밍 언어와 다르게 함수 안에 선언이 되면 함수전체에 걸쳐 정의

함수 모든 변수를 함수 꼭대기로 끌어올린 것처럼 동작

 

10.2 프로퍼티로서의 변수

자바스크립트 전역변수는 전역 객체의 프로퍼티이다

this 키워드로 전역 객체를 참조할 있도록 한다

 

10.3 유효범위 체인

유효범위 안에서 변수를 정의하는 객체의 목록 또는 체인

유효범위체인의 범위는 전역∈함수∈중첩된함수

유효범위 체인과 관련된 코드는 함수를 호출 때마다 달라지게 된다

With구문, 클로져를 이해하는데 중요 개념이다

 

 

 

* 출처 : 자바스크립트 완벽 가이드 정리