# 자바스크립트 학습
# 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으로 출력되는 것이 아닌 자바스크립트 코드로 간주하여 실행되어 악의적인 코드가 실행, 보안상 큰 문제를 일으킬 수 있다.