자바스크립트에서 변수는 어떤 데이터를 담고 있음. 하나의 변수는 어떤 상황에서는 String이 될 수 있고 또 다른 상황에서는 number가 될 수 있음.
1 2 | let message = "hello"; message = 123456; | cs |
이와 같이 한 변수가 String이나 number가 될 수 있는 특성을 가진 프로그래밍 언어를 "dynamically typed(동적 타입 지정)"이라고 함. 동적 타입 지정은 데이터 타입은 있지만 변수가 데이터 타입 중에 하나에 종속되지 않는 특성을 이야기 함.
자바스크립트에는 7가지 기본 데이터 타입이 있음. 이번 포스팅과 다음 포스팅에서 이에 대해 설명할 예정!
A number
1 2 | let n = 123; n = 12.345; | cs |
위와 같이 number 타입은 정수와 소수 모두를 가리킴. number 타입과 같은 경우에는 곱하기(*), 나누기(/), 더하기(+), 빼기(-) 등과 같은 연산자로 연산이 가능함.
게다가 Infinity나 -Infinity, NaN과 같은 특이한 숫자 값도 number타입에 속함.
* Infinity
Infinity는 수학에서 무한대(∞)를 나타냄. Inifinty는 어떠한 숫자 보다 더 큰 값을 가지고 있음.
Infinity의 값은 0으로 나눌 때 나타남.
1 | alert(1 / 0); //Infinity | cs |
또는 Inifinity라고 쓰면 그 값이 Inifinity로 될 수 있음.
1 | alert(Infinity); //Infinity | cs |
* NaN
NaN은 계산의 오류를 나타냄. NaN이 나타나는 경우는 수학 연산을 잘 못했거나, 값을 알 수 없는 경우에 나타남.
1 | alert("not a number" / 2); //NaN | cs |
1 | alert("not a number" / 2 + 5); //NaN | cs |
그래서 NaN이 수학 연산 안에 있다면, NaN이라는 값이 전체의 결과에 영향을 미칠 수 있음!
# 수학 연산이 안전한 자바스크립트!
자바스크립트에서 수학 연산을 하는 것은 안전함. 0으로 나누는 것이나 숫자가 숫자가 아닌 String을 숫자처럼 사용하는 것 등 어떤 것이든 가능함.
스크립트는 수학 연산에서 에러가 났을 때 치명적인 에러로 간주하고 프로그램이 죽는 것과 같은 일은 일어나지 않음. 최악의 상황이라고 해봤자 NaN을 출력하는 것 뿐임!
특수한 숫자 값은 공식적으로 number 타입에 속함. 물론 엄밀히 말하면 숫자는 아닐 수 있음.
number에 대해서는 다른 챕터에서 더 다루기로 하겠음..
A String(문자열)
자바스크립트에서 String은 따옴표로 둘러 싸여있어야 함.
1 2 3 | let str = "Hello"; let str2 = 'Single quotes are ok too'; let phrase = `can embed ${str}`; | cs |
쌍따옴표와 홑따옴표는 단순한 따옴표라 자바스크립트에서 두 개의 동작에 차이가 없음.
백틱 같은 경우에는 확장된 기능을 가지고 있는 따옴표임. 백틱은 ${....}에 변수를 넣으면 String에 해당 변수를 포함시켜 String 값을 만들 수 있음.
1 2 3 4 5 6 7 | let name = "John"; //embed a variable alert(`Hello, ${name}!`); //Hello, John! //embed an expression alert(`the result is ${1 + 2}`); //the result is 3 | cs |
${ ... } 안 표현의 결과가 String의 일부분이 됨. 백틱에서 ${ ... } 안에 어떤 것이든 넣을 수 있음! 위에서처럼 name과 같은 변수나 1 + 2와 같은 수학 표현이나 더 복잡한 표현식들을 넣을 수 있음.
이런게 가능한건 백틱만이니 주의할 것!!! 다른 따옴표들은 이런 기능을 할 수 없음!
1 | alert("the result is ${1 + 2}"); // the result is ${1 + 2} | cs |
A boolean (논리 타입)
boolean 타입은 true와 false 두 개의 값을 가짐.
boolean 타입은 일반적으로 yes와 no의 의미를 저장하는데 사용함. true는 yes, false는 no의 의미를 갖고 있음.
예를 들어서,.
1 2 | let nameFieldChecked = true; // yes, name field is checked let ageFieldChecked = false; // no, age field is not checked | cs |
1 2 3 | let isGreater = 4 > 1; alert(isGreater); //true | cs |
null 값은 위에 소개된 타입들 어디에서 속하지 않음! 오직 null 값만 포함된 위의 타입들과는 분리된 타입으로 생각하면됨.
1 | let age = null; | cs |
null과 비슷하게 undefined도 어떠한 데이터 타입에도 속하지 않는 값을 의미함.
undefined의 의미는 "값이 아직 할당되지 않음"을 의미함.
만약 변수가 선언이 되었는데 그 변수에 값을 할당 하지 않는 경우에는 값이 undefined로 나타남.
1 2 | let x; alert(x); //undefined | cs |
1 2 3 | let x = 123; x = undefined; alert(x); //undefined | cs |
객체(Object)과 심볼(Symbol)
object타입은 특별함. 다른 String이나 number와 같은 타입들은 "원시(primitive)" 타입이라고 하는데, 이는 원시 타입들은 하나의 값만 속해있기 때문임. 즉, 하나의 변수에 두 개 이상의 값을 할당받을 수 없음. 반면에, object타입은 데이터의 집합이나 더 복잡한 객체를 저장할 때 사용됨. 원시 타입을 더 포스팅한 뒤에 object에 대해 더 자세히 다룰 예정임.
symbol타입은 객체의 유일한(고유) 식별자를 생성할 때 사용됨.
typeof 연산자
typeof 연산자는 인자(argument)의 타입을 리턴함. 다른 타입의 값을 다르게 처리하거나 현재의 변수가 어떤 타입인지 확인하고 싶을 때 사용됨. 이 typeof 연산자는 두 가지 형태의 구문이 있음
1. 연산자 : typeof x
2. 함수 : typeof(x)
즉, 위의 종류로 보다시피 괄호로 묶이거나 안묶고 사용이 가능함. 결국 결과는 동일함.
typeof x를 호출하면 string타입으로 해당 타입의 이름이 리턴됨.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | typeof undefined // "undefined" typeof 0 // "number" typeof true // "boolean" typeof "foo" // "string" typeof Symbol("id") // "symbol" typeof Math // "object" (1) typeof null // "object" (2) typeof alert // "function" (3) | cs |
'자바스크립트' 카테고리의 다른 글
[JavaScript공부 - 8] Operators(연산자) (0) | 2019.01.30 |
---|---|
[JavaScript공부 - 7] Type Conversions(타입 변환) (0) | 2019.01.25 |
[JavaScript공부 - 5] Variables(변수) (0) | 2019.01.21 |
[JavaScript 공부 -4] JavaScript의 "use strict" (0) | 2019.01.17 |
[JavaScript공부 -3] 코드의 구조 (0) | 2019.01.16 |
댓글