1HOON
논리적 코딩
1HOON
전체 방문자
오늘
어제
  • HOME (186)
    • ☕️ JAVA (28)
      • WhiteShip Java LIVE Study (6)
      • Effective JAVA (10)
    • 🔮 KOTLIN (4)
    • 🌱 SPRING (51)
      • 스프링 인 액션 (22)
      • JPA (18)
    • ☕️ JAVASCRIPT (6)
    • 📃 DATABASE (40)
      • ORACLE (37)
      • MSSQL (2)
    • 🐧 LINUX (4)
    • 🐳 DOCKER (5)
    • 🐙 KUBERNETES (4)
    • 🏗️ ARCHITECTURE (8)
    • 📦 ETC (26)
      • TOY PROJECT (5)
      • RECRUIT (1)
      • 그냥 쓰고 싶어서요 (14)
    • 🤿 DEEP DIVE (1)
    • 🚽 Deprecated (9)
      • PYTHON (3)
      • AWS (2)
      • HTTP 완벽가이드 (3)
      • WEB (1)

블로그 메뉴

  • 홈
  • 방명록
  • 관리

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
1HOON

논리적 코딩

[TYPES & GRAMMAR] 챕터 2 : VALUES - Array
☕️ JAVASCRIPT

[TYPES & GRAMMAR] 챕터 2 : VALUES - Array

2019. 8. 22. 03:54

 

Github에 공개되어있는 내용 중 TYPES & GRAMMAR의 챕터 2 : VALUES 의 Array 내용을 개인적으로 번역한 것입니다.

원문 : https://github.com/getify/You-Dont-Know-JS/blob/master/types%20%26%20grammar/ch2.md

 

getify/You-Dont-Know-JS

A book series on JavaScript. @YDKJS on twitter. Contribute to getify/You-Dont-Know-JS development by creating an account on GitHub.

github.com


챕터 2 : VALUES

array, string, number는 어느 프로그램에서건 가장 기초가 되지만, JavaScript에서는 이 타입들이 당신을 당황하게 할 수 있는 특징들을 가지고있다.

 

JavaScript에 내장된 여러 타입들을 살펴보고 이들의 동작과 이점이 무엇인지 알아본다.

 


Arrays

다른 정적 타입의 언어들과 대조적으로, JavaScript의 array는 string부터 number, object 심지어 array까지 모든 타입의 값을 포함할 수 있는 컨테이너이다.

 

1
2
3
4
var a = [ 1, "2", [3] ];
a.length;    // 3
a[0] === 1;    // true
a[2][0] === 3;    // true
cs

 

array는 선언 시 길이를 미리 지정할 필요가 없으며, 선언 이후 값을 추가하기만 하면 된다.

 

1
2
3
4
5
6
7
var a = [];
a.length;    // 0
 
a[0] = 1;
a[1] = "2";
a[2] = [3];
a.length;    // 3
cs

 

주의 : array의 값에 delete 연산자를 사용하면 array의 요소를 비우게 된다. 다만, array의 요소를 비우더라도 length는 변하지 않으므로 주의해야한다.

 

array의 요소가 연속되지 않는 array를 사용할 때 특히 주의하도록 한다.

 

1
2
3
4
5
6
7
8
var a = [];
 
// a[1]은 값을 넣어주지 않음
a[0] = 1;
a[2] = [3];
 
a[1];    // undefined
a.length;    // 3
cs

 

위 코드에서 다른 요소들 사이의 빈 공간(a[1])은 혼란을 야기할 수 있다. 그 빈 공간이 undefined 값을 가지고 있는 것 처럼 보이지만 실제로 undefined 값을 지정한 것(a[1] = undefined)과 동일하게 동작하지는 않기 때문이다.

 

array가 숫자로 인덱싱이 될 것이라고 생각하겠지만, array 또한 object이기 때문에 문자열 키와 속성을 추가할 수 있다.

(그러나 이것은 array의 length를 증가시키지는 않는다.)

 

1
2
3
4
5
6
7
8
9
var a = [];
 
a[0] = 1;
a["foobar"] = 2;
 
a.length;    // 1
 
a["foobar"];    // 2
a.foobar;    // 2
cs

 

하지만 알아둬야할 것은, 키 값으로서 문자열 값은 키를 문자열이 아닌 숫자 인덱스로 사용하길 원한다면 10진수로 강제될 수 있다는 것이다.

 

1
2
3
4
5
var a = [];
 
a["13"] = 42;
 
a.length;    // 14
cs

 

일반적으로 array에 문자열 키나 속성을 추가하는 것은 좋은 생각은 아니며, 키-값 형태는 object를, array에는 숫자 인덱스만을 사용하는 것이 바람직하다.

 

Array-Likes

array-like 객체에 array의 네이티브 함수(indexOf, concat, forEach ...)를 사용하기 위해서는 반드시 array로의 변환이 필요하다.

 

예를 들어, 여러 DOM 연산자는 DOM 요소의 리스트를 리턴하는데 이 DOM 요소는 array가 아닌 array-like 이다. 다른 예로는 함수가 arguments를 추출할 때 전달 인자들이 array-like로 리턴되는데, array로서 사용하기 위해서는 변환이 필요하다.

 

1
2
3
4
5
6
7
8
function foo ()
{
    var arr = Array.prototype.slice.call(arguments);
    arr.push("bam");
    console.log(arr);
}
 
foo("bar", "baz");    // ["bar", "baz", "bam"]
cs

 

ES6에서는 Array.from() 이 내장 함수로 추가되어 위 코드와 같이 array-like를 array로 변환할 수 있다.

 

1
2
3
4
function foo ()
{
    var arr = Array.from(arguments);
}
Colored by Color Scripter
cs

 


추가

Array-Like는 유사배열객체라고도 부르는데, 배열처럼 보이는데 타입은 Object인 객체를 말한다.

 

array-like는 아래 코드와 같이 만들 수 있는데, 조건이 있다.

첫째, 반드시 length가 필요하며 값이 변경될 경우 갱신해줘야한다.

둘째, 인덱스 번호가 0부터 시작해 1씩 증가해야만 한다.

 

1
2
3
4
5
let arrayLike = {
      0 : "Array"
    , 1 : "Like"
    , length : 2
};
cs

 

이러한 array-like는 타입이 object이므로 배열처럼 보이지만 Array의 내장 함수를 사용할 수 없는데, ES5에서는 call 방식으로 배열로 변환하고 ES6부터는 위 설명과 같이 Array.from으로 변환할 수 있다.

 

앞으로 배열같이 생겼는데 타입이 object이면 array-like 인지도 확인해봐야겠다... 어려운 자바스크립트....

 

 

 

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'☕️ JAVASCRIPT' 카테고리의 다른 글

HTML Entities 치환 라이브러리, html-entities  (0) 2022.07.19
도로명주소 API 연동하기  (0) 2019.10.05
자바스크립트에서 소수점 계산이 이상하다??  (0) 2019.08.30
[TYPES & GRAMMAR] 챕터 1 : TYPES  (1) 2019.02.06
eval() 과 new Function()  (0) 2018.08.27
    '☕️ JAVASCRIPT' 카테고리의 다른 글
    • 도로명주소 API 연동하기
    • 자바스크립트에서 소수점 계산이 이상하다??
    • [TYPES & GRAMMAR] 챕터 1 : TYPES
    • eval() 과 new Function()
    1HOON
    1HOON

    티스토리툴바