이력

  • 2021.10.08 포스팅
  • 2021.11.26 사소한 수정

모든 내용을 상세히 담으려 하지 않았습니다.
제가 모르는 부분이나, “이런 것도 있었어?” 하는 부분, 중요하다고 생각되는 부분,
다시 한번 되새기고 싶은 부분만 기록했습니다.
읽어주셔서 감사합니다.

10.1 개요

  • 글로벌 오브젝트는 자바스크립트가 만들며 개발자 프로그램으로 만들 수 없습니다. 오브젝트의 프로퍼티를 사용하려면 프로퍼티 앞에 오브젝트를 지정해야 합니다. 하지만 글로벌 오브젝트는 하나라는 환경으로 인해 오브젝트를 지정하지 않고 프로퍼티를 사용합니다.
  • 글로벌 오브젝트에 값, 함수, 생성자, Math, JSON 프로퍼티가 있으며 함수 프로퍼티를 글로벌 함수라고 부릅니다. 글로벌 함수를 전역 함수, 내장 함수라고 부르기도 합니다. 값 프로퍼티를 글로벌 프로퍼티라고 합니다.,

10.2 프로퍼티 리스트

  • 생성자 프로퍼티: 글로벌 오브젝트의 생성자 프로퍼티는 Array, Boolean, Date, Error(다양한 에러들 포함), Function, Number, Object, String
  • new Number()에서 Number가 생성자 프로퍼티이다. new Number()가 실행되면 빌트인 Number 오브젝트의 prototype에 연결된 프로퍼티로 새로운 오브젝트를 생성하여 반환합니다.

10.3 글로벌 프로퍼티

프로퍼티 이름
NaNNot-a-Number
Infinity무한대 값
undefinedundefined
  • 글로벌 프로퍼티는 외부 프로그램으로 값을 변경할 수 없으며, for-in 루프로 열겨할 수도 없다. delete로 삭제할수도 없다. 오브젝트를 지정하지 않고도 프로퍼티에 접근할 수 있다.

10.4 NaN 여부, isNaN()

  • 파라미터에 값을 지정하지 않으면 undefined로 인식되며, undefined는 숫자 값으로 변환하면 NaN이 되어 true가 된다.
  • null은 숫자 값 0으로 변환되어 false가 된다.
  • 아래의 코드에서 NaN === NaN 이 false가 나오는 것은 ES3 규격의 버그​이다.
1
2
3
js.log(NaN === NaN);  // false
js.log(isNaN(NaN));  // true
js.log(NaN !== NaN);  // true, ES5 스펙에서 추천하는 NaN 체크 방식이다.
  • Number 오브젝트가 숫자를 위한 오브젝트이므로 숫자를 비교하려면 Number 오브젝트의 메소드를 사용하는 것이 정상적인 설계이다. 이 관점에서 보면 글로벌 오브젝트에 isNaN 함수가 있는 것은 설계상의 실수이다. ES6에서 Number.isNaN() 함수가 추가되었다.​

10.5 무한대 값 여부, isFinite()

10.6 정수값 변환, parseInt()

  • 특징은 정수값으로 변환하여 반환한다는 것이다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
첫 번째 파라미터: 정수값 변환

1. 파라미터 값을 문자열로 변환하여 내부 처리를 합니다.
2. 문자열의 처음부터 하나씩 오른쪽으로 이동하면서 반환합니다.
3. 첫 번째 자리가 음수 부호이면 다음 문자부터 비교합니다.
4. 숫자로 변환할 수 없는 문자를 만나면 그때까지 변환한 값을 반환합니다.
 - 숫자가 아닌 값이 있으면 일부만 변환되어 반홥된다.
5. NaN 처리를 하지 않습니다.
 - 정상적으로 변환된 것으로 생각할 수 있으므로 주의가 필요하다
6. 문자열 앞과 뒤의 화이트 스페이스는 변환 대상에서 제외시킨다.
 - 화이트 스페이스를 무시하고 값만 변환한다.
7. 문자열을 숫자 값으로 변환하고 사인 부호로 곱한 값을 반환한다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
두 번째 파라미터: 진수 변환

1. 두 번쨰 파라미터를 작성하지 않거나 0을 작성하면 10진수로 변환합니다.
2. 2이면 2진수로, 10이면 10진수로, 16이면 16진수로 변환합니다.
3. 2보다 작거나 36보다 크면 NaN을 반환합니다.
 - 단, 0은 10진수를 적용한다.
4. 첫 번째 파라미터의 처음 두 개의 문자가 0x 또는 0X이면 16진수로 변환합니다.
5. 첫 번째 파라미터의 첫 문자가 0이면 8진수로 변환합니다.
 - ES3 부터 8진수 사용을 권하지 않으며 정상적으로 동작하지 않을 수 있습니다.
 - 따라서 확실하게 변환하기 위해 두 번째 파라미터에 8 지정을 권합니다.

10.7 실수값 변환, parseFloat()

  • 자바스크립트는 부동 소수점으로 값을 표현하므로 실수로 변환하는 것은 의미가 없다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
실수값 변환 기준

1. 파라미터 값을 문자열로 변환하여 내부 처리를 합니다.
2. 문자열의 처음부너 하나씩 오른쪽으로 이동하면서 변환합니다.
3. 문자열 앞과 뒤의 화이트 스페이스는 처리 대상에서 제외시킵니다.
 - 화이트 스페이스를 무시하고 값만 변환합니다.
4. 첫 번째 문자가 숫자 값으로 변화되지 않으면 NaN을 반환합니다.
 - 파라미터에 값을 작성하지 않거나 빈 문자열을 작성하면 NaN이 반환된다.
5. 양수/음수 부호, 숫자, 소수점, 지수 이외의 문자를 만나면 그때까지 변환한 값을 반환합니다.
6. 문자열을 숫자 값으로 변환하고 사인 부호로 곱한 값을 반환합니다.

10.8 문자열 실행, eval()

  • 반환하면 반환된 값을 반환하고 값을 반환하지 않으면 undefined를 반환합니다.

10.9 URI 인코딩, encodeURI()

  • 아래의 문자를 제외한 문자를 UTF-8로 % 16진수 16진수로 형태로 변환한다.
1
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #

10.10 URI 확장 인코딩, encodeURIComponent()

  • 아래의 문자를 제외한 문자를 UTF-8로 % 16진수 16진수로 형태로 변환한다.
1
A-Z a-z 0-9 - _ . ! ~ * ' ( ) 

10.11 URI 디코딩 (decodeURI() )

10.12 URI 확장 디코딩 (decodeURIComponent() )