LHJ

I'm a FE developer.

12-2. Global 오브젝트 / Global 프로퍼티, 프로퍼티 리스트

30 Nov 2020 » js_beginner

12-2. Global 오브젝트 / Global 프로퍼티, 프로퍼티 리스트

프로퍼티 리스트

  • NaN : Not-a-Number
  • Infinity : 무한대 값
  • undefined : undefined

값에는 3개의 값이 있습니다.

함수

  • isNaN() : NaN 여부. NaN이면 true, 아니면 false 반환
  • inFinite() : 유한대 여부. 유한이면 true, 아니면 false
  • parseInt() : 정수로 변환하여 반환
  • parseFloat() : 실수로 변환하여 반환
  • eval() : 문자열을 JS 코드로 간주하여 실행
  • encodeURI() : URI 인코딩
  • encodeURIComponent() : URI 확장 인코딩
  • decodeURI() : encodeURI 함수의 인코딩 값을 디코딩
  • decodeURIComponent() : encodeURIComponent 함수의 인코딩 값을 디코딩

Global 오브젝트는 인스턴스를 만들지 못하므로 모두 함수입니다.

parse 이걸 보통 개발자들은 파싱한다고 얘기합니다.
파싱이란 문자열을 숫자로 바꾸거나 문자열을 자바스크립트 코드로 바꾸거나 이러한 어떤 변환을 뜻합니다.

이것은 언제 사용하냐면 style에서 widthmargin을 더할 때 사용합니다.

  • width: 24px
  • margin-left: 12px

px를 없애려면 정규표현식을 사용해야됩니다.
그런데 이는 좀 귀찮으니 parseInt를 호출하면 px는 반환하지 않고 24만 반환합니다.
이럴 때 parseInt 함수를 사용합니다.

parseFloat는 변환을 하긴 하는데 ‘실수’로 변환하는 것입니다.

eval() 함수

evaluate의 약자입니다.
이 함수는 일단 사용하지 않는 것으로 생각해주세요.
이것은 문자열을 JS 코드로 간주하여 실행하기 때문에 그렇습니다.
문자열을 기계어로 바꾸고 실행까지 해버립니다.
바꾸는 것 까지는 괜찮은데 실행까지 해버려서 문제가 됩니다.

문자열 안에 악의를 가진 해커가 해킹하는 코드를 넣어놨습니다.
그런데 그것이 실행되어 버리면 문제가 되겠죠?
그래서 보안에 관련된 문제가 발생할 수 있으므로 eval() 함수는 되도록이면 사용하지 않는 것이 좋습니다.

encode / decode

인코딩과 디코딩이 있습니다.

  • 인코딩 : 숫자와 문자를 사람이 보기 어렵게 바꾸는 것입니다.
  • 디코딩 : 인코딩한 것을 원래 사람이 볼 수 있는 숫자와 문자로 바꾸는 것입니다.

Global 프로퍼티

  • Global 프로퍼티 종류

    • NaN : Not-a-Number
    • Infinity : 무한대
    • undefined : undefined

Global 프로퍼티는 NaN, Infinity, undefined 이렇게 3개가 있습니다.


  • 상수 개념으로 사용

    • 외부에서 프로퍼티 값 변경 불가

        console.log(NaN); // NaN
        console.log(Infinity); // Infinity
        console.log(undefined); // undefined
      
      1. Number.MAX_VALUE처럼 프로퍼티 앞에 오브젝트 이름을 작성해야 하지만
      2. 글로벌 오브젝트는 실체가 없으므로
      3. 위 코드처럼 오브젝트 이름을 작성하지 않고 프로퍼티 이름만 작성
      4. 오브젝트 이름을 작성하지 않으면 글로벌 프로퍼티 인식

상수인데 대문자로 작성 안하고…
undefined는 값인데, 나머지는 값도 아니고…

그러면 console.log() 안에 작성한 이것들을 프로퍼티라는 것입니다.
프로퍼티 이름이라는 것입니다.


  • delete 연산자로 삭제 불가

그런데 프로퍼티 이름이라면 앞에 오브젝트 이름이 있어야될거 아니에요?
Number.MAX_VALUE <- 이것처럼요.
그런데 글로벌 오브젝트는 오브젝트라는 실체가 없기 때문에 Number처럼 글로벌이라고 쓸 수 가 없는 것입니다.

그래서 위와 같이 프로퍼티 이름만 작성합니다.

그러면 자바스크립트 엔진이 오브젝트가 없으면 글로벌 오브젝트의 프로퍼티로 간주해서 값을 구하는 거죠.

그런데 어쨌든 프로퍼티잖아요.
프로퍼티는 { key(name) : value } 형태로 저장이 되니깐, 어딘가에 저장이 되어야 하잖아요.
어딘가에 저장이 되어야 자바스크립트 엔진이 찾아서 값을 반환시켜줄꺼잖아요.
그런데 글로벌 오브젝트는 실체가 없대요.

처음에 설계할 때 글로벌 오브젝트에 있는 프로퍼티와 함수는 window 오브젝트에 저장하는 것으로 되어있습니다.
그래서 예를 들면, window.NaN 해도 NaN 값이 나옵니다.
이는 뒤에가서 설명하겠습니다.

현시점에서는 글로벌 오브젝트는 실체가 없는데, 거기에 있는 프로퍼티와 함수들은 window 오브젝트에 저장된다.라는 것만 기억하셔도 되겠습니다.