-
[자바스크립트 비기너] Boolean 오브젝트, 자바스크립트 특징, JSON, Date, Math 오브젝트개인 공부/JavaScript 2021. 12. 2. 23:53
Boolean 오브젝트
- 빌트인 오브젝트
- 값이 있으면
true
로 인식한다. false
인식 기준undefined
,null
,NaN
- 빈 문자열, 숫자 타입의 0
new Boolean()
toString()
- 변환 대상의
true
,false
를 문자열로 변환한다.
1. 자바스크립트 특징
- 자바스크립트는 스크립팅(Scripting) 언어이다.
- 스크립팅 언어 특징
- 소스 파일의 코드를 사전에 컴파일하여 실행 파일을 만들지 않고 사용하는 시점에 컴파일하여 실행한다.
- 컴파일 순서
- 소스 파일의 위에서 아래로부터
function
키워드를 만나면function 오브젝트
를 생성한다.- 이때, 함수 안의 코드는 컴파일하지 않는다. 함수가 호출되었을 때, 위의 방법으로 컴파일한다.
2. JS와 객체지향
- 자바스크립트는 객체지향 언어이다.
- ES5 스펙에 기술되어 있다.
- 자바스크립트 OOP 구현
- 다른 언어의 OOP 구현과 차이가 있다.
- JS 특징이 반영된 구현
3. 오브젝트에 프로퍼티 추가
defineProperty()
- 대상 오브젝트에 프로퍼티 추가 또는 프로퍼티 속성 변경
- 프로퍼티마다 상태를 갖고 있다.
- 변경/삭제/열거 가능 여부
- 상태가 가능일 때만 처리할 수 있다.
- 프로퍼티 추가시 상태가 결정된다.
defineProperties()
- 다수의 프로퍼티를 추가하거나 속성 변경
- 함수 기능은
defineProperty()
와 같다.
- 함수 기능은
4. 프로퍼티 디스크립터
프로퍼티 디스크립터
- 프로퍼티의 속성 이름과 속성 값을 정의한다.
- 디스크립터 타입 분류
- 데이터 프로퍼티 디스크립터
- 액세스 프로퍼티 디스크립터
- 공용 프로퍼티 디스크립터
- 디스크립터 타입에 속한 속성만 같이 사용할 수 있다.
디스크립터 타입 인식 기준
- 먼저
value
또는writable
작성을 체크한다. - 작성되어 있으면 데이터 프로퍼티 디스크립터 타입으로 인식한다.
- 작성되어 있지 않으면 액세스 프로퍼티 디스크립터 타입으로 인식한다.
- 데이터와 액세스 프로퍼티 디스크립터를 함께 작성할 수 없기 때문에 구분이 가능하다.
value 속성
- value 속성을 get/set 속성과 함께 작성할 수 없다.
writable 속성
- 프로퍼티 값 변경 가능, 불가
writable: true
- 프로퍼티 변경 가능
writable: false
- 디폴트 값:
false
- 프로퍼티 변경 불가
- 에러가 발생하진 않지만 값이 변경되지 않는다.
- 디폴트 값:
enumebrable 속성
for~in
으로 열거 가능 여부enumerable: true
- 프로퍼티 열거 가능
enumerable: false
- 디폴트 값:
false
- 프로퍼티 열거 불가
- 디폴트 값:
configurable 속성
- 프로퍼티 삭제 가능, 불가
configurable: true
- 프로퍼티 삭제 가능
- value 이외 속성 변경 가능
configurable: false
- 디폴트 값:
false
- 프로퍼티 삭제 불가
- value 이외 속성 변경 불가
- 디폴트 값:
5. getter와 setter, get 속성, set 속성
get 속성
- getter: OOP 용어
obj.book.get()
처럼 함수로 호출하면 에러가 발생한다!
set 속성
- setter: OOP 용어
6. 프로퍼티 추출
getPropertyOf()
- 파라미터의
prototype
에 연결된 프로퍼티를 반환한다. setPrototypeOf()
가 ES6에 있다!
getOwnPropertyNames()
- 오브젝트의 프로퍼티 이름을 배열로 반환한다.
- 열거 가능 여부를 체크하지 않는다.
- 자신이 만든 프로퍼티를 대상으로 한다.
- 다른 오브젝트에서 받은 프로퍼티는 제외된다.
keys()
- 열거 가능 프로퍼티의 이름을 반환한다.
7. 프로퍼티 디스크립터 함수
getOwnPropertyDescriptor()
- 프로퍼티 디스크립터의 속성 이름, 값을 반환한다.
- 다른 오브젝트에서 받은 프로퍼티는 제외된다.
preventExtensions()
- 오브젝트에 프로퍼티 추가 금지 설정
- 프로퍼티 삭제, 변경은 가능하다.
- 추가 금지를 설정한 후에는 추가 가능으로 변경할 수 없다.
isExtensible()
- 오브젝트에 프로퍼티 추가 금지 여부를 반환한다.
true
: 추가 가능,false
: 추가 불가
seal()
- 오브젝트에 프로퍼티 추가, 삭제 금지를 설정한다.
- 추가 금지는 오브젝트 단위로 설정하고 삭제 금지는 프로퍼티 단위로 설정한다.
- 추가 금지를 하더라도 변경할 수 있다.
freeze()
- 오브젝트에 프로퍼티 추가, 삭제, 변경 금지를 설정한다.
1. JSON 오브젝트 개요, JS 타입을 JSON 타입으로 변환
JSON 오브젝트 개요
- 빌트인 오브젝트이다.
new 연산자
로 인스턴스를 생성할 수 없다.- JSON 주요 기능
- 데이터 송수신의 변환 기준
- 텍스트이므로 전송 속도가 빠르다.
- json, txt 확장자도 사용 가능하다.
- JS 데이터 타입 지원
- 다른 언어도 사용하지만 완전하게 같지 않을 수 있다.
stringfy()
- JS 타입을 JSON 타입의 문자열로 변환한다.
JSON.stringfy()
2. JSON 타입 파싱
parse()
- JSON 타입을 JS 타입으로 변환한다.
- 작성 주의
"123."
을"123.0"
으로 작성한다."0123"
처럼 첫 자리에 0을 사용할 수 없다.- 대문자 NULL 대신
null
을 사용해야 한다. - 10진수를 사용한다.
- 두 번째 파라미터를 작성하면 파싱한 오브젝트를 하나씩 읽어가면서 두 번째 파라미터의 함수를 실행한다.
3. Date 오브젝트 개요, 시간값 표시 기준, 시간의 문자열 형태
Date 오브젝트 개요
- 년월일, 시분초, 밀리초를 제공한다.
- 시간값(Time Value)라고도 부른다.
- UTC를 기준으로 한다.
시간값 표시 기준
- 월은 0부터 시작한다.
- 0: 1월, 1: 2월...
- 일은 1에서 31일까지 정수로 표시한다.
- 요일은 0부터 시작한다.
- 0: 일요일, 1: 월요일...
4. Date 오브젝트 프로퍼티
new Date()
- Date 인스턴스를 생성한다.
- 파라미터를 작성하지 않으면 UTC 기준 현재 시간을 넘겨준다.
- 시간을 자동으로 넘긴다.
Date 오브젝트 함수 분류
- 시간을 반환하는 함수
- getMonth(), getDate() 등
- 시간을 설정하는 함수
- setMonth(), setDate() 등
- 주의사항
- 클라이언트의 시간은 사용자가 변경할 수 있다.
- 마감 시간처럼 시간이 중요할 때는 서버 시간을 사용한다.
5. Math 오브젝트
Math 오브젝트 개요
- 수학 계산용 오브젝트
- new 연산자로 인스턴스를 생성할 수 없다.
- Math, JSON, 글로벌 오브젝트
- 메소드가 아니라 함수이다.
Math.abs(값)
형태
- ES6에서는 수학 함수가 많이 늘어났다. - 이로 인해 JS의 사용 범위가 더 넓어졌다. - 특히 머신러닝/딥러닝에서 유용하다.
abs()
- 음수를 양수로 변환한 절댓값을 반환한다.
ceil()
- 소수 이하 올림, 정숫값을 반환한다.
max()
- 파라미터 값 중에서 가장 큰 값을 반환한다.
- 파라미터 값을 전부 숫자로 변환하여 비교한다.
NaN
가 하나라도 있으면NaN
를 반환한다.
min()
- 파라미터 값 중에서 가장 작은 값을 반환한다.
- 파라미터 값을 전부 숫자로 변환하여 비교한다.
NaN
가 하나라도 있으면NaN
를 반환한다.
pow()
- 파라미터 x값의 y승을 반환한다.
- y가 0일 때 x가
NaN
라도 1을 반환한다. - y가
NaN
이면NaN
을 반환한다. - 이렇게 경우의 수가 많기 때문에 사용하기 전에 테스트를 해야 한다.
random()
- 0에서 1 미만 사이의 난수를 반환한다.
'개인 공부 > JavaScript' 카테고리의 다른 글
[자바스크립트 중고급] Argument, 스코프 (0) 2022.01.05 [자바스크립트 중고급] Function 오브젝트 (0) 2022.01.05 [자바스크립트 비기너] Array 오브젝트(ES5) (0) 2021.11.18 [자바스크립트 비기너] Array 오브젝트(ES3) (0) 2021.11.18 [자바스크립트 비기너] Global 오브젝트 (0) 2021.11.11