Javascript 배열(Array)과 객체(Object)- 생성 방법의 갈등 1/3
{ } 는 key:value 타입의 객체(Dictionary) 와 그 타입을 갖는 클래스를 만들때 사용한다.
배열객체는 push , pop , shift , unshift , splice , slice 등의 배열 관련 메서드를 사용할수있다.
var myArray = new Array();// 배열 생성자(클래스) – ECMA 비추천 X
var myArray = [ ]; // [ ] 리터럴(literal) – 배열 생성시 사용
var myArray = { };// { } 리터럴(literal) – 객체( 클래스) 생성시 사용
일반적으로 new Array() 방식은 추천하지 않는데, 아마도 new Array(5) 여기서 오는 모호함 때문인것 같다.(5입력된 1개 배열 인지 5개 빈배열인지)
var myArray = new Array(5)// 갯수로 : 5개(0~4) index를 가지는 배열 생성
var myArray = new Array(1, 2, “test”, “C”);//1, 2,”test” ,”C” 로 초기화 배열 생성
key , value 초기화는 { } 리터럴만 가능하다. → new Array 와 다르게 갯수지정이 불가능하다.
배열은 각기 다른 타입의 Value 를 포함할 수 있지만, 추천하지않는다.
[ ] 는 배열생성용 , { } 는 객체 or Dictionary 생성용
var myArray = [1,2,3]// 1,2,3 으로 초기화된 배열생성
var myArray = [ ]; // 빈 배열 생성후 key value 식도 접근가능
myArray = [1,2,3,4,5]; // 빈 배열 생성 후 도 가능 { } 는 오류남
myArray[0] = 1;
myArray[1] = “A”
myArray[“name”] = “test”; // myArray.name = “test” 도 같음
var myArray = {}; // 빈 배열,인스턴스 객체로생성
var myArray = {1,2,3} // 오류 초기화는 반드시 key:value 로만 생성가능
var myArray = {}; // 빈 객체 생성후 배열식도 접근가능(★하지만 배열은 아니다.)
// 단 myArray = {1,2,3,4} 이런식의 배열식 접근은 오류
myArray[0] = 1;
myArray[1] = “A”;
myArray[“name”] = “test”; // myArray.name = “test” 도 같음
myArray[“name”] =”test”;// key:name value:”test”
myArray[0] = 100;
myArray[1] = 101;// 배열 – 인덱스 0,1 에 각각 값 배열 객체console.log(myArray) // [ 100, 101 ] 구조를 가짐 아래 객체와비교할것
myArray[“name”] =”test”;// key:name value:”test”
myArray[0] = 100;
myArray[1] = 101;// 배열 – 인덱스 0,1 에 각각 값 배열 객체console.log(myArray) // [ 100, 101 ] 구조를 가짐 아래 객체와비교할것
var myArray = {};
myArray[“name”] =”test”;// key:name value:”test”
myArray[0] = 100; // 0 : 100 구조를 가지는 명확한 key:value 타입
myArray[1] = 101; // 1 : 101 구조를 가지는 명확한 key:value 타입
console.log(myArray) // { 0:100 , 1:101}을 가지는 객체타입
위에서 언급했듯 new Array , [ ] , { } 모두 생성한 후에는, [“key”] = “value” 로
모두 접근이 가능해진다.
var myArray = [“name”:”test” , “job”:”driver”]// 오류 Unexpected token ‘:’
var myArray = {“name”:”test” , “job”:”driver”}// 정상적으로 생성됨
var myArray = {}; // var myArray = [ ]; 로 작성해도 같은 결과를 얻을 수 있다.
myArray[“member”] = {}; // var myArray = [ ]; 로 작성해도 같은 결과를 얻을 수 있다.
myArray[“member”][“name”] = “myname”;
myArray[“member”][“job”] = [];// push , pop , shift , unshift 는 배열만 가능하므로
myArray[“member”][“job”].push(“driver”);
myArray[“member”][“job”].push(“saler”)
myArray[“member”][“job”].push(“CEO”)
ㆍmyObject 선언과 동시에 초기화
var myObject = { // var myObject = [ ~ ] 는 오류가 발생 , 선언과 동시에 생성은 { } 만 가능
}
ㆍmyObject 선언 후 속성 및 함수 정의
var myObject = {}
// var myObject = [ ] 선언해도 같은 작동을 한다.
myObject.name = “test”; // name 속성추가
myObject.job = “test”; // job 속성추가
myObject.getName = function() { return this.name} // 함수생성
// myObject[“getName”] = function() { return this.name} 도 같다
console.log(myArray.getName())
class myClass { // 빈 클래스 만들기
ㆍ생성자 있는 클래스 제대로 만들어보기
class myClass {
name;
tel;
1. var myArray = new Array() 형식은 추천하지 않는다.
→ new Array(5)
1) 5개의 요소를 같은 배열을 생성하지만, 5 값을가지는 1개 요소배열인지 의 모호성
2) 최근 트렌드가 코드를 단축화 하여 코딩하는경우가 많으므로 [ ] 방식을 좀 더 추천
2. 배열을 만들때는 [ ] , 객체(Dictionary or 클래스)로 생성할때는 { }
→ 리터럴 [ ] 로 생성된 객체도 { } 와 마찬가지로 Dictionary 타입으로 생성이 가능하다.
(하지만 [ ] 는 배열로만 사용하자)
– 배열 메소드(push , pop등등) 사용가능(O) // 배열 메소드를 사용할경우 반드시 [ ]로!
– 단, 생성시 초기화(사전형식)는 안됨(X) // { } 리터럴만 가능. 단 ,배열초기화는 됨
– 클래스 및 객체 생성도 안됨(X) // { } 리터럴만 가능
3. 리터럴 { } 객체(Dictionary) 사용시 주의사항
– 객체(Dictionary) , 클래스 모두 사용가능(O)
– 배열이 아니기때문에 배열식 초기화는 당연히 안됨(X)
// a = {1,2,3}
// a[0] = “test” , a[1] =1; 요소식 접근 생성은 가능하나 배열은 아님
// { 0 : “test” , 1:1 } key:value 구조의객체 타입
– 배열 메소드를 사용 안됨 (당연함 객체니까) (X) // [ ] 리터럴만만 가능
4. 배열과 객체의 사용
기본적으로 배열은 같은 데이터 타입을 여러개 다룰 때 사용한다면,
객체는 너의 다양한 속성을 가진 1개의 타입을 가진다.
우리가 데이터를 다루는데 있어, 1 가지 타입을 여러개 다룰때는 배열
여러가지 속성(과 메서드) 을 가진 1가지의 데이터를 다룰 대는 객체로 생각하면된다.
그래서 , 그런 객체 여러개를 한번에 다룰때 배열에 넣고 사용하면
효과적으로 데이터를 다룰 수 있다.