Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- NextJS v13
- react
- db수정
- 로딩 후 실행
- 배열 중복 제거
- 부트캠프항해
- 알고리즘
- 프로그래머스
- 실전프로젝트
- jQuery
- server component
- greedy
- 백준
- 항해99추천
- JavaScript
- 카테고리필터
- 동전 0
- 항해99
- 항해99솔직후기
- 날씨 api
- 항해99후기
- 클라이언트 컴포넌트
- 중복카테고리
- 서버 컴포넌트
- 자바스크립트
- 숫자를 별점으로
- 배열 메소드
- 탐욕알고리즘
- 중복선택
- 그리디
Archives
- Today
- Total
공부 및 일상기록
[Javascript] JavaScript의 자료형과 JavaScript만의 특성은 무엇일까? 본문
먼저 자료형에 대하여 알아보자
- Boolean (불리언)
- 원시 자료형 중 하나이다.
- true(참) 혹은 false(거짓) 값으로만 표현할 수 있다.
- String (문자열)
- 원시 자료형 중 하나
- '값' 또는 "값" 와 같이 따옴표 혹은 쌍따옴표나 외따옴표를 쌍으로 값을 묶어 표현한다.
- Number (숫자)
- 원시 자료형 중 하나
- 10 처럼 어떠한 따옴표나 콤마 등을 넣지 않고 숫자 값으로 표현한다.
- 10 그리고 '10' 두 값은 다른 자료형을 가지고 있기 때문에 같다고 볼 수 없다.
- undefined
- 원시 자료형 중 하나
- 값이 할당되지 않은 변수는 기본적으로 undefined 값을 가진다.
- null
- 원시 자료형 중 하나
- 어떤 값이 비어있음을 의도적으로 표현할 때 사용된다.
1. 느슨한 타입(loosely typed)의 동적(dynamic) 언어
- JavaScript의 변수는 어떤 특정 타입과 연결되지 않으며, 모든 타입의 값으로 할당 및 재할당이 가능하다.
- 예시)
- let apple = '맛있다' //문자열
- apple = 4 //apple이 숫자가 됨
- apple = true //apple이 불리언이됨
2. Javascript 형변환
- 함수와 연산자에 전달되는 값은 대부분 적절한 자료형으로 자동 변환된다. 이런 과정을 형 변환 이라고 한다.
- 또한 전달받은 값을 의도를 가지고 원하는 타입으로 변환(명시적변환)해주는 경우도 형 변환 이라고 한다.
- 문자형으로 변환
- 문자형으로의 형 변환은 문자형의 값이 필요할 때 일어난다.
- alert메서드는 매개변수로 문자형을 받기 때문에 alert(value)에서 value는 문자형이어야한다. 만약 다른 형의 값을 전달 받으면 문자형으로 자동변환 된다.
- String(value) 함수를 호출해 전달받은 값을 문자열로 변환 할 수도 있다.
- let value = true; //boolean
- value = String(value); //변수 value에 문자열 "true"가 저장됨
- 위처럼 문자열로의 변환은 대부분 예측 가능한 방식으로 일어난다.
- 숫자형으로 변환
- 숫자형으로의 변환은 수학과 관련된 함수와 표현식에서 자동으로 일어난다.
- 예를들어 숫자형이 아닌 값에 나누기 / 를 적용한 경우
- alert("6" / "2"); // 3, 문자열이 숫자형으로 자동 변환된 후 연산이 수행됨
- Number(value) 함수를 사용하면 주어진 값(value)을 숫자형으로 명시해서 변환할 수 있다.
- let str = "123"; //string
- let num = Number(str); //문자열 "123"이 숫자 123으로 변환됨.
- 숫자형 값을 사용해 무언가를 하려고 하는데 그 값을 문자기반 폼(form)을 통해 입력 받는 경우 명시적 형 변환이 필수이다.
- 숫자 이외의 글자가 들어있는 문자열을 숫자형으로 변환하려고 하면 결과가 NaN (Not a Number)이 된다.
- let age = Number("임의의 문자열 123");
- alert(age); //NaN, 형 변환이 실패되어 나온다.
- 아래 표는 숫자형으로 변환 시 적용되는 규칙이다.
전달 받은 값 | 형 변환 후 |
undefined | NaN |
null | 0 |
true and false | 1 과 0 |
string | 문자열의 처음과 끝 공백이 제거됩니다. 공백 제거 후 남아있는 문자열이 없다면 0, 그렇지 않다면 문자열에서 숫자를 읽습니다. 변환에 실패하면 NaN이 됩니다. |
- 불린형으로 변환
- 이 변환은 논리 연산을 수행할 때 발생한다.
- Boolean(value) 를 호출하여 명시적으로 변환할 수 있다.
- 기본규칙
- 숫자 0, 빈 문자열, null, undefined, NaN과같이 직관적으로 비어있는 느낌의 값은 false가 된다.
- 그 외의 값은 true이다.
- 헷갈리기 쉬운 경우
- 숫자형 변환시 undefined는 0이 아니라 NaN이 된다.
- 불린형 변환시 문자열 "0"과 " "과 같은 공백은 불린형으로 true가 된다.
3.== 과 ===
- ==는 변수의 값을 기반으로 유형을 수정하여 비교한다.
- === 는 변수 유형을 고려하게 된다.
- 예시
- 0 == false // true, 0값은 false와 동일하므로 true
- 0 === false //false, 두 피연산자의 유형(number와 boolean)이 다르기 때문에 false
- 2 == "2" //true, 자동형변환으로 인해 true
- 2 === "2" //false, 유형(number와 string)이 다르기 때문에 false
- 헷갈리기 쉬운 경우
- null == undifined // true
- null === undifined //false, 유형(object와 undefined)이 다르기 때문에 false
- 2 != "2" //false, 값이 다르지 않기 때문에 false
- 2 !== "2" //true, 유형(number와 string)이 다르기때문에 true
- 예시
- **** NaN 은 어떤 것과도 같지 않다!!
- 따라서 변수를 비교하거나 어떤 비교를 위해 항상 === 연산자를 사용하는 습관을 기르자
4. 느슨한 타입(loosely typed)의 동적(dynamic) 언어의 문제점은 무엇이고 보완할 수 있는 방법은 무엇인가
- 장점 : 느슨한 타입의 동적언어 특징은 변수 생성시에 원시변수의 타입을 미리 선언해도 되지 않는 장점이 있다.
- 단점 : 기능명세서와 API가 오고가는 대형프로젝트를 진행하면 타입이 올바른지 체크하는것이 까다롭기 때문에 배포시 예상치 못한 문제와 직면할 수있다.
- 예를들어 백엔드 개발자가 api명세서에 가격은 string으로 기입한다고 하고 프론트에서 가격에 1000등 숫자형을 기입하면 에러가 발생하는 것이다. ( "1000" 을 입력하여 문자형 숫자를 입력해야 한다.)
- 보완방법 : 타입스크립트 등을 사용하여 개발자간의 커뮤니케이션에서 발생하는 오차를 줄이도록 한다. 하지만 그렇지 않다면 API명세서를 꼼꼼히 살펴보도록 한다.
5. undefined와 null의 미세한 차이를 비교해보자
- undefined : 원시타입으로, 선언한 후에 값을 할당하지 않은 변수나 값이 주어지지 않은 인수등에 자동으로 할당된다.
- undefined가 반환되는 경우
- 값을 할당하지 않은 변수
- 메서드와 선언에서 변수가 할당받지 않은 경우
- 함수가 값을 return하지 않았을 때
- null : 원시타입으로, 어떤 값이 의도적으로 비어있음을 표현한다.
- 둘의 미묘한 차이
- undefined는 값이 지정되지 않은 경우를 의미하지만, null의 경우에는 해당 변수가 어떤 객체도 가리키지 않다는 것을 의미한다.
- typeof를 출력하면 undefined는 undefined 이고, null은 object이다.
- *** undefined==null은 true가 반환된다.
'개발 > Javascript' 카테고리의 다른 글
[Javascript] 호이스팅과 TDZ는 무엇일까? (1) | 2022.09.23 |
---|---|
[Javascript] 객체와 불변성이란? (1) | 2022.09.23 |
[Javascript] 숫자를 별점으로 변환하기 (0) | 2022.09.08 |
[Javascript] 날씨 api를 이용하여 날씨 입력 (0) | 2022.09.08 |
[Javascript] 로딩 후 실행 (0) | 2022.09.08 |