반응형

# 자바스크립트 학습

# Array 인스턴스 생성

## new Array()

  • new Array() 생성자 함수를 호출하면 Array 인스턴스 생성, 반환
  • Array 인스턴스 or Array 오브젝트 배열 생성 기준
파라미터에 따라 배열 생성 기준이 다르다.
파라미터를 작성하지 않으면 빈 배열이 반환된다.
파라미터에 작성한 순서대로 엘리먼트에 설정된다.
new Array(3)처럼 파라미터에 숫자를 작성하면 3개의 엘리먼트를 생성한다.
  • 파라미터를 작성하지 않을경우 빈 배열 반환 예
var obj = new Array();
log(typeof obj);
log(obj.length);

=>
object
0
  • 파라미터에 작성한 순서대로 엘리먼트에 설정 예
var one = new Array(10, 20);
log(one);

var two = new Array([30, 40]);
log(two);

=>
[10, 20]
[[30, 40]]
  • 파라미터에 숫자를 작성하면 숫자만큼의 엘리먼트 생성 예
var obj = new Array(3);
log(obj);

=>
[undefined, undefined, undefined]

## Array()

  • Array 인스턴스를 생성, 반환
  • new Array()와 생성 방법 및 기능 같음
  • 인스턴스 생성 논리
new Array()는 new 인스턴스에서 생성자 함수를 호출하여 인스턴스를 생성

Array()는 직접 생성자 함수를 호출하여 인스턴스 생성

## length 프로퍼티

  • 배열 [1, 2, 3]에서 length의 값은 3, Array 오브젝트에 {length: 3}의 형태로 설정된다.
  • 처음 인덱스는 0, 마지막 인덱스는 2이다.
var value = [1, 2, 3];
log(value.length);

=>
3
  • length 프로퍼티는 열거/삭제는 할 수 없지만, 변경은 가능하다.
  • length의 값을 변경하면 배열의 엘리먼트 수가 변경된다.
var value = [1, 2, 3];
value.length = 5;
log(value);

=>
[1, 2, 3, undefined, undefined]
var value = [1, 2, 3];
value.length = 2;
log(value);

=>
[1, 2]

length 가 3에서 2로 줄어들면서 기존에 있던 뒤의 엘리먼트가 삭제된다.

 

# 엘리먼트 추가, 삭제 메커니즘

## 엘리먼트 추가

  • 배열에 엘리먼트를 추가하는 방법
삽입할 위치에 인덱스 지정

표현식으로 인덱스 지정
  • 삽입할 위치에 인덱스 지정 예
var value = [1, 2];
value[4] = 5;
log(value);

=>
[1, 2, undefined, undefined, 5]
  • 표현식으로 인덱스 지정 예
var value = [1, 2];
value[value.length + 2] = 5;
lgo(value);

=>
[1, 2, undefined, undefined, 5]

## delete 연산자

구분 데이터(값)
object 매치 대상
프로퍼티 삭제할 프로퍼티 이름
인덱스  배열의 인덱스
반환 삭제 성공 시 true / 실패 시 false
  • var 변수는 삭제가 불가능하다.
var value = 123;
log(delete value);

=>
false

var 변수를 삭제할 수 없다.
  • 글로벌 변수는 삭제 가능하다.
value = "글로벌 변수";
log(delete value);

try {
	log(value);
} catch {
	log("존재하지 않음");
};

=>
true
존재하지 않음
  • 프로퍼티의 삭제 : {name: value} 삭제 방법
삭제할 프로퍼티 이름 작성
ES5 에서 삭제 불가 설정 가능
var book = {title: "책"};
log(delete book.title);
log(book.title);

=>
true
undefined
var book = {title: "책"};
log(delete book);

sports = {item: "축구"};
log(delete sports);

=>
false
true
  • 인덱스로 배열의 엘리먼트 삭제
var value = [1, 2, 3, 4];
log(delete value[1]);
log(value.length);

=>
true
4

삭제는 해도 length가 변경되진 않는다.

## 배열 엘리먼트 삭제 메커니즘

  • 삭제된 인덱스에 undefined를 설정한다. ( 이는 엘리먼트 삭제 시 앞으로 하나씩 당겨서 엘리먼트를 이동하면 처리 시간이 걸리기 때문에 엘리먼트 삭제 시 undefined를 설정 )
var value = [1, 2, 3, 4];
delete value[1];
log(value);

for ( var k = 0; k < value.length; k++ ) {
	log(value[k]);
};

=>
[1, undefined, 3, 4]
1
undefined
3
4
  • 배열을 읽을 때 제외시켜야 한다.

 

# 엘리먼트 삽입, 첨부

## unshift()

구분 데이터(값)
data 기준
파라미터 [tiem1 [, tiem2 [, ...]]]opt
반환 추가 후의 length
  • 0번 인덱스에 파라미터 값을 삽입
  • 배열에 있던 엘리먼트는 뒤로 이동
var value = [1, 2];
value.unshift(345, 67);
log(value);

=>
[345, 67, 1, 2]

## push()

구분 데이터(값)
data 첨부 기준
파라미터 [tiem1 [, tiem2 [, ...]]]opt
반환 첨부 후의 length
  • 배열 끝에 파라미터 값을 첨부
var value = [1, 2];
value.push(345, 67);
log(value);

=>
[1, 2, 345, 67]

## concat()

구분 데이터(값)
data 연결 기준
파라미터 [tiem1 [, tiem2 [, ...]]]opt
반환 연결 결과
  • 배열에 파라미터 값을 연결하여 반환한다.
var value = [1, 2];
var result = value.concat(3, 4);
log(result);

=>
[1, 2, 3, 4]
  • 파라미터가 1차원 배열이면 값만 반영
var value = [1, 2];
var result = value.concat([3], [4]);
log(result);

=>
[1, 2, 3, 4]
반응형
반응형

# 자바스크립트 학습

# Array 오브젝트(ES3)

## Array 오브젝트 개요

  • 빌트인 오브젝트 즉, 이미 만들어져있는 것
  • Array(배열) 형태
[123, "ABC", "가나다"]
대괄호 안에 콤마로 구분하여 값을 작성
  • 배열 엘리먼트(Element)
[123, "ABC"] 에서 123, "ABC" 각각을 엘리먼트 or 요소라고 부른다.
배열 안에 작성할 수 있는 엘리먼트의 수는 2의 32승-1개
  • 인덱스(Index) : 엘리먼트 위치를 인덱스라고 부른다. 왼쪽부터 0번 인덱스, 다음이 1번 인덱스이다.
  • 배열의 특징
엘리먼트 작성이 순서를 갖고 있다.
배열 전체를 작성한 순서로 읽거나 인덱스로 값을 추출할 수 있다.

## 배열 생성 방법

  • new Array()로 생성한다.
var book = new Array();
  • Array()로 생성한다.
var book = Array();
  • 대괄호로 생성
var book = [];

일반적으로 이 형태를 사용한다.

## 엘리먼트 작성 방법

  • var book = ["책1", "책2"];
  • 대괄호 안에 콤마로 구분하여 다수를 작성 할 수 있다.
  • String 타입은 큰 따옴표, 작은 따옴표 모두 사용 가능하다.
  • 자바스크립트의 모든 타입의 값, 오브젝트 사용이 가능하다.
  • 값을 작성하지 않고 콤마만 작성하면 undefined가 설정된다. (값을 정의하지 않았다. 값을 작성하지 않았다.)

## 배열 차원

  • 1차원 배열
대괄호 하나에 엘리먼트 작성
[12, 34, 56] 형태
var list = [12, 34, 56];

for ( var k = 0; k < list.length; k++ ) {
	log(list[k]);
};

=>
12
34
56
  • 2차원 배열
배열 안에 1차원 배열을 작성
[[12, 34, 56]]
var list = [[12, 34, 56]];

for (var k = 0; k < list.length; k++ ) {
	var one = list[k];
    
    for (var m = 0; m < one.length; m++ ) {
    	log(one[m]);
    };
    
};

=>
12
34
56
  • 3차원 밸열
배열 안에 2차원 배열을 작성
[[[12, 34, 56]]]
var list = [[12, 34, 56]];

for (var k = 0; k < list.length; k++ ) {
	
    var one = list[k];  
    for (var m = 0; m < one.length; m++ ) {
    	
        var two = one[m];
        for (var p = 0; p < two.length; p++) {
    		log(two[p]);    
        };
   
   	};
   
};

=>
12
34
56

 

# Array 오브젝트 프로퍼티(ES3)

## ES3 기준의 프로퍼티 리스트

이름 개요
new Array() 인스턴스 생성
Array() 인스턴스 생성
Array 프로퍼티
length 배열의 엘리먼트 수 반환
Array.prototype
constructor 생성자
unshift() 배열 처음에 엘리먼트 삽입
push() 배열 끝에 엘리먼트 첨부
concat() 배열 끝에 값을 연결
slice() 인덱스 범위의 엘리먼트를 복사
join() 엘리먼트와 분리자를 결합하여 반환
toString() 엘리먼트를 문자열로 연결하여 반환
toLocaleString() 엘리먼트를 지역화 문자로 변환하고 문자열로 연결하여 반환
shift() 첫 번째 엘리먼트를 삭제하고 삭제한 엘리먼트 반환
pop() 마지막 엘리먼트를 삭제하고 삭제한 엘리먼트 반환
splice() 엘리먼트를 삭제하고 새로운 엘리먼트를 삽입,
삭제한 엘리먼트 반환
sort() 엘리먼트 값을 Unicode 순서로 분류하여 반환
reverse() 엘리먼트 위치를 역순으로 바꾸어 반환

 

반응형
반응형

# 자바스크립트 학습

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

# 자바스크립트 학습

# Global 오브젝트

## Global 오브젝트의 개요

  • 모든 <script> 엘리먼트를 통해 하나만 존재한다.
  • 하나만 존재하므로 new 연산자로 인스턴스 생성 불가
  • 모든 코드에서 공유한다.
  • 이름(Global)은 있지만 오브젝트 실체가 없다.
  • 오브젝트를 작성(사용)할 수 없다.

## Global 오브젝트 함수, 변수

  • Global 오브젝트의 함수, 변수를 Global 함수, Global 변수라고 한다.
  • 함수 안에 작성한 것을 지역 함수, 로컬(Local) 함수라고 부르며, 함수 안에 작성된 변수를 지역 변수, 로컬 변수라고 한다.
  • Global 오브젝트를 전역 객체라고 부르기도 한다.

 

# Global 프로퍼티

## 프로퍼티 리스트

이름 개요
NaN Not-a-Number
Infinity 무한대 값
undefined undefined
함수
isNaN() NaN 여부, NaN 이면 true, 아니면 false 반환
isFinite() 유한대 여부, 유한이면 true, 아니면 false
parseInt() 정수로 변환하여 반환
parseFloat() 실수로 변환하여 반환
eval() 문자열을 JS코드로 간주하여 실행
encodeURI() URI 인코딩
encodeURIComponent() URI 확장 인코딩
decodeURI() encodeURI 함수의 인코딩 값을 디코딩
decodeURIComponent() decodeURIComponent 함수의 인코딩 값을 디코딩
  • 인코딩 : 숫자와 문자를 사람이 보기 어렵게 바꾸는 것
  • 디코딩 : 인코딩 한 것을 사람이 볼 수 있는 숫자와 문자로 바꾸는 것

## Global 프로퍼티

  • Global 프로퍼티의 종류
NaN : Not-a-Number

Infinity : 무한대

undefined : undefined
  • 상수 개념으로 사용하며, 외부에서 프로퍼티의 값을 변경할 수 없다.
  • delete 연산자로 삭제 불가
log(NaN);
log(Infinity);
log(undefined);

=>
NaN
Infinity
undefined

 

# Global 오브젝트와 Window 오브젝트의 관계

## Global과 Window 관계

  • 글로벌과 window  오브젝트의 주체 
글로벌 오브젝트 : 자바스크립트(JS)가 주체

window 오브젝트 : window가 주체
  • 주체는 다르지만, 글로벌 오브젝트의 프로퍼티와 함수가 window 오브젝트에 설정된다. 따라서 프로퍼티와 함수 사용하려면 window 오브젝트를 사용해야 한다.
  • Host 오브젝트의 개념을 활용하여 Global오브젝트의 함수와 프로퍼티를 window 오브젝트에 저장할 수 있고, window 오브젝트를 이용하여 사용할 수 있다.

 

# 정수, 실수 변환

## parseInt()

구분 데이터(값)
파라미터
진수, 디폴트: 10진수
반환 변환한 값
  • 값을 정수로 변환하여 반환한다.
값이 123.56이면 123반환
log(parseInt(123.56));

=>
123

소수를 제외하고 정수만 반환
  • 값이 "123px"이면 123 반환, 주로 이 용도로 parseInt를 많이 사용한다.
log(parseInt("-123.45"));
log(parseInt("123px"));
log(parseInt("12AB34"));

=>
-123
123
12
  • 0 또는 빈 문자열을 제외시킨다.
log(parseInt("0012"));
log(parseInt("   123"));
log(parseInt());

=>
12
123
NaN
  • 진수를 적용하여 값을 변환한다.
log(parseInt(13, 16));	// 13을 16진수로 변환
log(parseInt("0x13"));	// 0(숫자)x는 16진수를 나타낸다.

=>
19
19

## parseFloat()

구분 데이터(값)
파라미터
반환 변환한 값
  • 값을 실수로 변환하여 반환한다.
자바스크립트는 기본적으로 실수로 처리하므로
실수로 변환하는 것은 의미가 없다.
하지만, 문자열의 실수 변환은 의미가 있다.
log(parseFloat("-123.45") + 6);
log(parseFloat("12.34AB56"));

=>
-117.45
12.34

String 타입이지만 값이 숫자이면 변환
문자 이후는 변환하지 않는다.
  • 지수, 공백의 변환
log(parseFloat("1.2e3"));
log(parseFloat("  12.34  ") + 20);
log(parseFloat());

=>
1200
32.34
NaN
반응형

+ Recent posts