반응형

# 자바스크립트 학습

# NaN, 유한대 체크 함수

## isNaN()

구분

데이터(값)

파라미터

반환

true, false

  • 값의 NaN 여부를 반환한다.
  • 숫자값이 아니면 true를 반환한다.
log(isNaN("ABC"));
log(isNaN());

=>
true
true

값이 String 타입이므로 true
파라미터를 작성하지 않으면 undefined와 같음 true
  • 숫자 값이면 false를 반환, 값이 숫자로 변환되면 숫자로 인식한다.
log(isNaN(123));
log(isNaN("123"));
log(isNaN(null));

=>
false
false
false

String 타입이라도 값이 숫자이면 숫자로 인식한다.
null을 숫자로 변환하면 0
  • NaN === NaN 결과는 false, 이는 설계 실수 true가 맞다. (ES6의 Object.is()를 사용하면 true를 반환)
log(NaN === NaN);
log(Object.is(NaN, NaN));

=>
false
true

## isFinite()

구분 데이터(값)
파라미터
반환 true, false
  • 값이 Infinity(무한대) 또는 NaN이면 false를 반환한다.
  • finity(유한대)이면 true를 반환한다.
// NaN
log(isFinite(0 / 0));

// Infinity
log(isFinite(1 / 0));
log(isFinite("ABC"));

=>
false
false
false
  • 값이 숫자로 변환되면 숫자로 인식하여 체크한다.
log(isFinite(123));
log(isFinite("123"));
log(isFinite(false));

=>
true
true
true

 

# 인코딩, 디코딩

## encodeURI()

구분 데이터(값)
파라미터 URI
반환 인코딩 결과
  • URI를 인코딩하여 반환한다.
  • URI (Uniform Resource Identifiter) : 주소 창 끝에 첨부되는 값을 의미한다.
  • 인코딩 제외 문자를 제외하고 "%16진수%16진수" 형태로 변환한다.
  • 인코딩 제외 문자는 아래와 같다.
영문자, 숫자
# ; / ? : @ & = + $ , - _ . ! ~ * ( ) 따옴표
var uri = "data?a=번&b=호";
log(encodeURI(uri));

=>
data?a=%EB%B2%88&b=%ED%98%B8

## encodeURIComponent()

구분 데이터(값)
파라미터 URI
반환 인코딩 결과
  • URI를 인코딩하여 반환한다.
  • " ; / ? : @ & = + $ , "를 인코딩하는 것이 encodeURI()와 다른점이다.(encodeURI에 비해 인코딩 제외 문자가 적다.)

## decodeURI()

구분 데이터(값)
파라미터 인코딩 문자열
반환 디코딩 결과
  • 인코딩을 디코딩 하여 반환한다.
  • 인코딩은 사람들이 볼 수 없도록 하는 것으로 가독성이 많이 떨어짐
  • 디코딩은 사람들이 볼 수 있는 형태로 변환하는 것을 목적으로 한다.
  • 파라미터에 encodeURI()로 인코딩한 문자열을 작성한다.
var uri = "data?a=%EB%B2%88%b=%ED%98%88";
log(decodeURI(uri));

=>
data?a=번&b=호

## decodeURIComponent()

구분 데이터(값)
파라미터 인코딩 문자열
반환 디코딩 결과
  • 인코딩을 디코딩하여 반환한다.
  • 파라미터에 encodeURIComponent()로 인코딩한 문자열을 작성한다.

# eval() 함수

## eval()

구분 데이터(값)
파라미터 JS 코드
반환 JS 코드를 실행하여 반환한 것
  • 파라미터의 문자열로 자바스크립트 코드를 작성한다. 그리고 이것을 기계어로 번역하고 실행한다.
  • 실행 결과를 반환 값으로 사용하며, 값을 반환하지 않으면 undefined를 반환한다.
var result = eval("parseInt('-123.45')");
log(result);

=>
-123
  • 그런데, eval() 함수는 보안에 문제가 있다고 알려져 있다. 그러므로 사용을 권장하지 않는다.
  • 파라미터의 전체가 문자열이다보니, 해커가 악의적인 의도로 문자열을 파라미터에 넣는다면 String으로 출력되는 것이 아닌 자바스크립트 코드로 간주하여 실행되어 악의적인 코드가 실행, 보안상 큰 문제를 일으킬 수 있다.
반응형

+ Recent posts