- 배열
- 객체
자바의 배열은 ‘같은 자료형을 가진 변수’들의 집합이었다. 하지만 JS는 비명시적 자료형이기 때문에, 배열 역시 ‘모든 자료형을 담을 수 있는 변수’의 집합이라 할 수 있다.
이런 JS의 배열은 다음 두 가지 특징이 있다.
let arr1 = [1, 2, 3, 4,];
let arr2 = [1, 2,3, "Hello", 3.14, true, ['A', 'B', 'C']]
let arr = ["Apple", "Orange", "Mango"];
찾는 대상 값의 index를 반환, 대상이 없으면 음수를 반환
let result = arr.indexOf("Orange");
console.log(result); // 1
배열 내부의 모든 요소를 특정 구분자를 이용해, 한 문자열로 결합하여 반환
let result = arr.join("#");
console.log(result); // #Apple#Orange#Mango
원본 배열의 모든 요소의 순서를 반대로 뒤집는다.
let result = arr.reverse();
console.log(result); // Mango, Orange, Apple
원본 배열을 오름차순 정렬
arr.sort();
//숫자 배열
function desc(a, b){
return b-a;
}
// 문자열
function desc(a, b){
if(a>b) return 1;
else if(b>a) return 1;
else return 0;
}
arr.sort(desc)
let arr = ["Java", "Python", "Ruby", "C#"]
기존 배열의 맨 뒤에 넣는다.
arr.push("perl");
console.log(arr); // ["Java", "Python", "Ruby", "C#", “perl”]
배열의 맨 마지막 요소를 추출 후 반환한다.
let pop = arr.pop(); // C#
console.log(arr); // "Java", "Python", "Ruby"
기존 배열의 맨 앞에 넣는다.
arr.unshift("Perl") // “Perl”. "Java", "Python", "Ruby", "C#"
배열의 맨 처음 요소를 추출 후 반환한다.
arr.shift(); // "Python", "Ruby", "C#"
let arr = ["Apple", "Orange", "Mango", "Strawberry", "Grape", "Banana"]
인자로 받은 값에 따라 새로운 배열을 반환한다.
arr.slice(2) // [ "Mango", "Strawberry", "Grape", "Banana" ]
arr.slice(2,4) // [ "Mango", "Strawberry" ]
원본 배열의 중간에 삽입, 삭제가 가능한 함수
// 인자값이 2개인 경우 – 기준부터 n개의 양쪽 벽을 잇는다.
arr.splice(2,4) // ["Apple", "Orange", "Banana"]
// 인자값이 3개인 경우 - 세 번째 인자는 입력값이다.
["Apple", "Orange", "Mango", "Strawberry", "Grape", "Banana"]
arr.splice(4,0, "가") // ["Apple", "Orange", "Mango", "Strawberry", “가” ,"Grape", "Banana"]
arr.splice(4,1, "가") // ["Apple", "Orange", "Mango", "Strawberry", “가”, "Banana"]
arr.splice(4,2, "가") // ["Apple", "Orange", "Mango", "Strawberry", “가” ]
객체 개념은 자바와 유사하지만, 훨씬 범용성이 뛰어나고 자바스크립트 외의 다양한 언어에서 사용된다.
자바스크립트에서 객체를 생성하는 방법은 총 3가지가 있으며, 저마다 사용 빈도와 타이밍이 다르니 잘 이해하고 있어야 하며, 자바스크립트의 특징을 이해하고 있어야 한다.
{}
는 객체를 의미한다.자바스크립트에서 사용 빈도가 제일 낮고, 자바에서 생성하는 방식과 같다.
let obj = new Object();
이렇게 만들어준 빈 객체에 변수 선언을 안한 변수를 붙이면, 멤버필드가 만들어진다(특징)
obj.id = 1001;
사용 빈도가 높은 자바스크립트의 객체 생성 방식으로 흔히 JSON이라고 불린다.
먼저 이에 대해서 이해하려면 “직렬화”에 대해서 이해하여야 한다.
직렬화란?
데이터를 전송할 때, 각 프로그램의 언어가 다르다면 데이터를 전송할 수 없다. 정확히는 사용하는 언어의 방식으로 상대 프로그램에 데이터 전송이 불가능하다.
이는 서로 사용하는 자료형이 달라 데이터 간 호환이 안 되기 때문이다. 따라서 데이터를 하나의 양식으로 구조화시키는데, 이게 ‘직렬화’이다.
이 직렬화의 방식은 표준이 정해져 있지 않지만, 대게 XML 방식으로 데이터 구조를 직렬화 시켜 상대 프로그램으로 보내게 된다. 그럼 상대 프로그램은 사용 언어에 맞춰 역직렬화 하여 사용한다.
이런 직렬화 방식이 발전한 것이 “JSON(Java Script Object Notation) - 자바스크립트 객체 표기법” 이다. 즉, 객체 표기법인 {}
이 핵심이다.
JSON은 자바스크립트 내에서는 객체를 표기하는 방법이고, 다른 언어에서는 각 언어 간의 데이터 전송을 위한 직렬화 표기법으로 사용된다.
let obj = {
"id":1001, // int id = 1001;
"name":"Jack",
"kor":100,
"Hello":function() { // 멤버 메서드
console.log("Hello Json")
},
"10":"Ten"
}
{}
는 객체를 의미한다. “키” : “값”
의 형태로 표현한다..
을 통해 꺼내거나 obj[“id”]
와 같이 괄호를 통해 꺼낼 수 있다.obj.Hello(); // 메서드 호출
obj["10"] // Ten
obj.id // 1001
자바스크립트에서 모든 함수는 생성자가 될 수 있다. 다만 생성자로 쓰지 않을 뿐이다.
일단 생성자를 사용하기 위해선 다음을 알아야 한다.
new
를 통해 객체를 생성해야 한다.this
를 사용해서 만든다.// 기본형
function MyObject(){}
// 응용
function MyObject(num1, num2) { // 매개변수 설정도 가능하다.
this.num1 = num1; // this를 사용하면 멤버필드가 된다.
this.num2 = num2;
this.plus = function(){
return parseInt(this.num1) + parseInt(this.num2)
}
}
// 객체 생성
let result = new MyObject(20,30);
console.log(result.plus()); // 50